Rails 3 - 更改为 session_store :domain => :all 时的“无限”会话
Posted
技术标签:
【中文标题】Rails 3 - 更改为 session_store :domain => :all 时的“无限”会话【英文标题】:Rails 3 - "Infinite" Session when changing to 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 密钥似乎没有帮助(我对此感到困惑......我认为它应该可以工作) * 对于我的一生,我不知道如何手动删除会话
无论我做什么,在我进行此更改之前登录的任何人都无法在我执行此更改后退出。
提前感谢您的帮助! 本
【问题讨论】:
【参考方案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。当它没有找到它时,它只是创建一个新的(完全忽略旧的)。以上是关于Rails 3 - 更改为 session_store :domain => :all 时的“无限”会话的主要内容,如果未能解决你的问题,请参考以下文章
在新的 Rails 项目中从 SQLite 更改为 PostgreSQL
React on Rails - 如何将登录链接更改为注销链接?