【问题标题】:rails 2.3.15. Can't change session expiry date导轨 2.3.15。无法更改会话到期日期
【发布时间】:2017-02-14 23:30:17
【问题描述】:

我正在尝试在 Rails 应用程序中动态设置会话到期日期。它在我的本地运行良好(在 WEBrick 下运行)但不适用于生产(使用 Apache 和Passenger 3.0.19)

我使用的 ruby​​ 版本是 1.8.7,Rails 版本是 2.3.15。

session 默认是这样配置的:

ActionController::Base.session = {
  :key         => '_my_session',
  :secret      => 'some_key'
}

ActionController::Base.session_store = :active_record_store

我正在尝试向网站添加“记住我”功能,因此当用户勾选“记住我”时,cookie 的到期日期应设置为 2 周:

if params[:remember_me]
    ActionController::Base.session_options[:expire_after] = 2.weeks
else
  ActionController::Base.session_options.delete :expire_after
end

当我在本地测试代码时,这很好用:当我向网站发送第一个请求(在页面中打开登录)时,它会创建一个具有默认到期日期的 cookie(因此它会在浏览器关闭时到期),然后我勾选“记住我”,然后按“登录”。然后执行我的代码,将到期日期设置为 2 周,然后我被重定向到网站的主页。我可以在响应中看到“set-cookie”,因此它会将我的 cookie 更新为 2 周后过期。

但是当我将代码部署到使用乘客的生产环境时,它不起作用:当我打开登录页面时,我得到了具有默认到期日期的 cookie,但是当我登录时勾选了“记住我”,服务器让我登录并重定向到主页,但不会向我发送设置了过期日期的新 cookie。

当我修改生产中的默认配置以在 2 周后过期(而不是动态更改它),所以“记住我”基本上对所有用户都启用,它从一开始就创建具有正确过期日期的 cookie。但是,当我动态更改设置时,它似乎会忽略它们,并且它们不会反映在 cookie 中。我在生产中添加了一些日志,我可以清楚地看到 ActionController::Base.session_options[:expire_after] 确实得到了更新,但新的 cookie 从未发送到客户端。 我尝试了谷歌搜索并遵循了很多建议,但没有一个对我有用。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    我已经解决了这个问题。 我在 stackoverflow 上找到了一个有用的链接,可以帮助我解决问题:http://apidock.com/rails/ActionController/Base 该页面上的最后一条评论帮助我解决了问题 我变了

    if params[:remember_me]
        ActionController::Base.session_options[:expire_after] = 2.weeks
    else
       ActionController::Base.session_options.delete :expire_after
    end
    

    进入

    if params[:remember_me]
        request.session_options[:expire_after] = 2.weeks
    else
        request.session_options[:expire_after] = nil
    end
    

    现在 cookie 得到更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 2018-07-09
      • 2017-12-02
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      相关资源
      最近更新 更多