实施Cookie的最简单方法是什么,以便在浏览器重启之间会话持续存在?
答案 0 :(得分:5)
最好的办法是使用所谓的记住我的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。
答案 1 :(得分:4)
如果你想让你的cookie永远存在,你可以这样做:
cookies.permanent[:foo] = "bar"
请参阅http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html
上的Cookie文档答案 2 :(得分:1)
http://railscasts.com/episodes/274-remember-me-reset-password?view=comments
这是一个精彩的截屏视频,让我记住了Ryan Bates的饼干!