【问题标题】:Rails 3 - "Infinite" Session when changing to session_store :domain => :allRails 3 - 更改为 session_store :domain => :all 时的“无限”会话
【发布时间】:2011-07-10 02:08:02
【问题描述】:

我目前有基于 cookie 的会话。我正在尝试允许使用同一会话访问我系统上的所有子域,因此用户只需登录一次并被授予通过我的站点(section1.mysite.com、section2.mysite.com 等)的访问权限。

我已经像这样更新了我的 config/initializers/session_store.rb:

 Mysite::Application.config.session_store :cookie_store, :key => '_mysite_session', :domain => :all
 #Mysite::Application.config.session_store :cookie_store, :key => '_mysite_session'

注释掉的行显示了我之前的内容。现在,如果我在重新启动服务器时注销(没有保存 cookie 会话),这非常有用。但是,如果我有一个用于第一个配置的 cookie 会话,当我切换到 :domain => all 时,我无法销毁该会话。用户无限期登录,因为会话不会破坏。用户无法从已注释掉的会话配置上登录的会话中注销,并且一旦新配置到位,他们就会尝试注销。

我尝试过的事情: * 更改 security_token 似乎没有帮助 * 更改 session_store 密钥似乎没有帮助(我对此感到困惑......我认为它应该可以工作) * 对于我的一生,我不知道如何手动删除会话

无论我做什么,在我进行此更改之前登录的任何人都无法在我执行此更改后退出。

提前感谢您的帮助! 本

【问题讨论】:

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


    【解决方案1】:

    :domain 选项不应该是复数吗,如 :domains 中的那样?

    在你的情况下,可以这样做:

    Mysite::Application.config.session_store :cookie_store,
      :key => '_mysite_session', :domains => :all
    

    为了摆脱持久会话,您可能需要清除浏览器 cookie。

    更新:

    要删除用户 cookie,请编辑以下 Rails 文件:

    app/config/initializers/secret_token.rb:

    Mysite::Application.config.secret_token= 'XXXXXXXXX...XXXXXXXXX'
    

    【讨论】:

    • 我很确定 ":domain" 是一个键,而 ":domains" 是不正确的。而且,我同意清除我自己的浏览器持久会话和 cookie 可以为我清除问题,但是我不能在所有用户的浏览器上执行此操作。更改域后需要手动删除会话cookie。
    • 我为您的后一个问题添加了解决方案
    • 为了阐明 Arnaud 的更新代码究竟是如何摆脱用户 cookie 的(以防它帮助试图理解“为什么?”的人) - 在更改 secret_token 之后,服务器基本上是在寻找一个那时不同的cookie。当它没有找到它时,它只是创建一个新的(完全忽略旧的)。
    猜你喜欢
    • 2011-05-11
    • 2014-03-22
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2015-07-23
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多