在 Rails 3 中跨多个子域删除会话 Cookie
Posted
技术标签:
【中文标题】在 Rails 3 中跨多个子域删除会话 Cookie【英文标题】:Delete Session Cookies Across Multiple Subdomains in Rails 3 【发布时间】:2011-07-07 15:09:55 【问题描述】:我正在构建一个与 Wufoo 类似的 Rails 应用程序。当您注册时,您会获得一个子域,您可以在主页上登录。该应用程序正在运行,因此当您登录时,您会被重定向到您的子域。问题是我无法删除两个域上的会话。如果您在 (username.myapp.com) 上注销,它会在 (myapp.com) 上保持登录状态,反之亦然。
现在我正在使用session[:user_id] = nil
删除会话。有没有办法删除所有域中的所有会话。
此外,我将:domain => :all
附加到我的session_store.rb
文件中,这样我就可以跨多个子域保持登录状态。
【问题讨论】:
【参考方案1】:关键在于您如何设置会话 cookie,因为您无法从***域 (myapp.com) 中删除子域 cookie (username.myapp.com)。要解决这个问题,您需要在 myapp.com 域下设置所有共享会话 cookie。为此,请按以下方式设置会话:
Rails.application.config.session_store :cookie_store, :domain => 'myapp.com'
这样,当您销毁会话 (session[:id] = nil
) 时,您将删除共享 cookie。我相信您还必须使用 session[:id] 而不是 session[:user_id] 来删除会话。
【讨论】:
以上是关于在 Rails 3 中跨多个子域删除会话 Cookie的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID