【发布时间】:2013-10-18 17:29:35
【问题描述】:
我有 x.com 指向 apple.y.com,另外还有 one.y.com 和 two.y.com强>。我希望访问 x.com、one.y.com 或 two.y.com 的用户共享相同的会话。这可能吗?如果不是,最好的妥协是什么?
【问题讨论】:
标签: ruby-on-rails cookies
我有 x.com 指向 apple.y.com,另外还有 one.y.com 和 two.y.com强>。我希望访问 x.com、one.y.com 或 two.y.com 的用户共享相同的会话。这可能吗?如果不是,最好的妥协是什么?
【问题讨论】:
标签: ruby-on-rails cookies
one.y.com 和 two.y.com 可以通过将 cookie 域设置为 .y.com 来共享 cookie。这将在 y.com 的所有子域之间共享 cookie。
但是,x.com 不能直接与y.com 共享 cookie。有一个使用重定向的解决方案,但实施起来很棘手——http://www.codeguru.com/csharp/csharp/cs_internet/article.php/c19417/Sharing-Cookies-Across-Domains.htm(示例在 ASP.net 中,但您可以将解决方案应用于 RoR)。
【讨论】:
要让使用相同域的应用程序使用相同的会话 cookie 工作,您可以在环境配置文件中进行配置。我为我的一些应用程序这样做。这是针对 Rails 2.3.5 的应用程序,Rails 3 应该是一样的,但我并不肯定。
首先,在config/initializers/session_store.rb 中,确保:
# ActionController::Base.session_store = :active_record_store
被注释掉了。
接下来,您的所有应用程序都应该使用相同的密钥和秘密,在同一个文件中设置:
ActionController::Base.session = {
:key => '_myapp_session',
:secret => 'some really long string of hex'
}
最后,配置环境文件使用同一个域:
config/environments/development.rb
config.action_controller.session = {
:domain => ".rails.local"
}
config/environments/production.rb
config.action_controller.session = {
:domain => ".myapp.com"
}
【讨论】: