【发布时间】:2011-05-11 08:24:28
【问题描述】:
我有一个使用子域的 Rails3 应用程序。为了允许登录等在所有子域中工作,我在 config/initializers/session_store.rb 中执行此操作
MyApp::Application.config.session_store :cookie_store, :key => '_myapp_session', :domain => :all
当我将我的应用程序部署到 Heroku 时,它可以完美运行。我可以跨子域登录并保持登录状态。
但是,在本地开发时,这不工作。
我的浏览器确实正确设置了会话 cookie:
$ curl http://test.lhs.com/users/sign_in
...
Set-Cookie: _myapp_session=BAh...3ed; domain=.lhs.com; path=/; HttpOnly
...
但是,我的浏览器(我试过 Safari、FireFox 和 Chrome)没有设置这个 cookie。所以,当我登录时,我得到一个InvalidAuthenticityToken 错误。
我已尝试删除 :domain => :all 部分,它确实正确设置了会话 cookie,但仅适用于当前子域。像这样明确设置:domain => '.lhs.com' 也确实不设置cookie。
我在这里不知所措。为什么这在 heroku 上的生产中有效,但在本地无效。我什至尝试过不同的服务器(Webrick 与 rails server 和乘客独立)。我也试过在 80 端口而不是 3000 端口上本地运行,但这也没什么区别。
关于会话 cookie 未在本地设置的任何线索?谢谢!
【问题讨论】:
-
遇到同样的问题,在阅读了这个帖子之后,我现在使用这个主机名:localhost.localdomain:3000
标签: cookies ruby-on-rails-3 heroku