在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 中的子域之间共享会话(cookie)?

使用子域在 Rails 2.3.2 应用程序中丢失会话

跨子域访问会话(Rails 4)

如何在 ASP.NET 中跨多个 Web 应用程序维护相同的会话 ID

当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?

无法在 Safari 13 中跨 .test 子域共享 cookie