【发布时间】:2011-06-30 06:09:00
【问题描述】:
实现 cookie 以使会话在浏览器重新启动之间持续存在的最简单方法是什么?
【问题讨论】:
标签: javascript ruby-on-rails session
实现 cookie 以使会话在浏览器重新启动之间持续存在的最简单方法是什么?
【问题讨论】:
标签: javascript ruby-on-rails session
如果您希望您的 cookie 永远存在,您可以这样做:
cookies.permanent[:foo] = "bar"
请参阅http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html 上的 cookie 文档
【讨论】:
最好的办法是使用所谓的记住我的 cookie。由于会话 cookie 在浏览器重新启动之间不会持续存在,因此您需要使用其他类型的 cookie 来向您的应用程序表明用户就是他们所说的那个人。最常见的记住我功能是通过让用户选择他们希望应用程序记住它们来实现的。然后发生的事情是您需要创建一个 cookie 作为该用户的密码。通常您需要执行以下操作:
这是一个例子:
identifier = current_user.id
value = Digest::SHA1.hexdigest(current_user.created_at)[6,10]
cookies['remember_me_id'] = {:value => identifier, :expires => 30.days.from_now}
cookies['remember_me_key'] = {:value => value, :expires => 30.days.from_now}
最后,当您检查用户是否登录时,您还需要检查他们是否使用记住 cookie 登录。例如:
def current_user
current_user ||= login_from_session || login_from_cookie
end
def login_from_session
current_user = User.find(session[:id]) unless session[:id].nil?
end
def login_from_cookie
user = User.find(cookies['remember_me_id'])
if cookies['remember_me_key'] == Digest::SHA1.hexdigest(user.created_at)[6,10]
current_user = user
else
nil
end
end
这应该可以帮助您开始实施在浏览器重新启动后仍然存在的 cookie。
【讨论】:
http://railscasts.com/episodes/274-remember-me-reset-password?view=comments
这是 Ryan Bates 关于记住我的饼干的精彩截屏视频!
【讨论】: