【发布时间】: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