rails 2.3.15。无法更改会话到期日期

时间:2017-02-14 14:57:23

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

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

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

会话默认配置如下:

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(因此当浏览器关闭时它会过期),然后我打勾& #34;记住我"然后按"登录"。然后我的代码被执行,将到期日期设置为2周,然后我被重定向到网站的主页面。我可以看到" set-cookie"在回复中,所以它更新我的cookie将在2周后过期。

但是,当我将代码部署到使用乘客的生产时,它不起作用:我在打开登录页面时创建了默认的到期日期的cookie,但是当我使用"我"勾选后,服务器登录并重定向到主页,但没有向我发送设置了到期日期的新cookie。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

for(int i = lvOnlineUsers.Items.Count - 1; i >= 0; --i)
{
    OnlineUserList item = lvOnlineUsers.Items[i] as OnlineUserList;
    if (item != null && item.Name == username)
        lvOnlineUsers.Items.Remove(lvOnlineUsers.Items[i]);
}

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

现在cookie已更新。