Rails:如何解决不会过期的cookie?

时间:2013-01-16 03:38:22

标签: ruby-on-rails ruby-on-rails-3 session cookies session-cookies

在大多数情况下,Railscast #274 - Remember Me在我的Rails应用中设置记住我的令牌,虽然Cookie“正常”但{{1}之间似乎没有区别}和cookies.permanent[…] = …

奇怪的是,检查 Chrome Safari 中的Cookie(我迄今为止所测试的所有内容)都显示它们在“浏览器关闭”和“会议“分别。但我可以验证退出并重新启动网站将保留cookie并且用户仍然登录!?!所以,似乎还有其他事情正在发生......

我甚至不知道从哪里开始对此进行故障排除,并且对Rails cookie和/或行为不端的会话没有太多经验。 有什么想法吗?

这里有一些代码FWIW:

cookies[…] = …

sessions_controller.rb

module SessionsHelper

  def sign_in(user)
    if params[:remember_me]
      cookies.permanent[:remember_token] = user.remember_token
      self.current_user = user
    else
      cookies[:remember_token] = user.remember_token
    end
  end

  def current_user
    @current_user ||= User.find_by_remember_token!(cookies[:remember_token]) if cookies[:remember_token]
  end
  ...

1 个答案:

答案 0 :(得分:0)

我今天一直在与这个斗争,它不会与Rails相关,而是Chrome(我猜Opera也是如此)。自Chrome版本19开始,当选项继续我停止的地方时,它们不会跟随standard (section 4.3.1),也不会删除浏览器关闭时的任何Cookie。所以记住我的功能不能按预期工作,因为您希望在关闭浏览器时删除非永久性cookie。这是具有WontFix状态的铬虫:http://code.google.com/p/chromium/issues/detail?id=128513

在我的情况下(也可能是你的),情况更加奇怪,因为我没有使用继续我离开的地方选项,但Chrome仍未删除浏览器上的Cookie 。在发现this其他错误后,我意识到实际上选项是在Google Chrome关闭时继续运行后台应用,以防止删除这些Cookie。我不知道/记得我的浏览器是如何启用该选项的,或者它现在是否是默认行为......

无论如何,我的remember_me复选框正在按预期工作。希望你的修复也得到解决,如果没有,至少这会对你有帮助。