Javascript 使rails会话在浏览器重启之间保持的最简单方法

Javascript 使rails会话在浏览器重启之间保持的最简单方法,javascript,ruby-on-rails,session,Javascript,Ruby On Rails,Session,实现cookie以使会话在浏览器重新启动之间保持的最简单方法是什么?如果您希望cookie永远持续,可以执行以下操作: cookies.permanent[:foo] = "bar" 请参阅位于的cookie文档,最好使用所谓的“记住我”cookie。由于会话cookie在浏览器重启之间不会持久存在,因此您需要使用其他类型的cookie来向应用程序表明用户就是他们所说的用户。最常见的“记住我”功能是通过让用户选择希望应用程序记住它们来实现的。然后,您需要创建一个cookie,作为该用户的密码。

实现cookie以使会话在浏览器重新启动之间保持的最简单方法是什么?

如果您希望cookie永远持续,可以执行以下操作:

cookies.permanent[:foo] = "bar"

请参阅位于

的cookie文档,最好使用所谓的“记住我”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
这将帮助您开始实施cookies,这些cookies将在浏览器重新启动之后继续存在。


这是一个关于瑞安·贝茨的《记住我的饼干》的精彩视频

值得指出的是,一些rails身份验证框架(例如Desive)为该功能提供了内置支持。值得认真考虑使用这些,而不是从头开始构建。