在浏览器重新启动之间,最简单的方式是使rails会话保持不变

时间:2011-02-19 05:00:13

标签: javascript ruby-on-rails session

实施Cookie的最简单方法是什么,以便在浏览器重启之间会话持续存在?

3 个答案:

答案 0 :(得分:5)

最好的办法是使用所谓的记住我的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。

答案 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的饼干!