Cookies Rails 3,没有包含以下内容的本地会话cookie:domain=>;:全部的

Cookies Rails 3,没有包含以下内容的本地会话cookie:domain=>;:全部的,cookies,ruby-on-rails-3,heroku,Cookies,Ruby On Rails 3,Heroku,我有一个使用子域的Rails3应用程序。为了允许登录等跨所有子域工作,我在config/initializers/session_store.rb中执行此操作 MyApp::Application.config.session_store :cookie_store, :key => '_myapp_session', :domain => :all 当我将我的应用程序部署到Heroku时,这一点非常有效。我可以跨子域登录并保持登录状态 然而,在本地开发时,这并不起作用 我的浏览器

我有一个使用子域的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服务器
以及passenger单机版)。我还尝试在端口80而不是3000上本地运行,但这也没有什么区别


有没有线索说明为什么没有在本地设置会话cookie?谢谢

我不确定问题出在哪里,但我已将“lhs.com”更改为“lhs.me”,并将其移动到主机文件中的官方localhost定义之下。并不是所有这些都像一种魅力

当Rails 3.0.3中设置了
:domain=>:all
时,除非在浏览器中指定顶级域,否则似乎不会设置本地会话cookie。这可能是设计好的,尽管我看不到任何文档


因此,当您访问localhost时,会话将失败,但应在mylaptop.local上正常设置会话。“.local”似乎满足TLD的要求。

Rails中有一个bug,当以
本地主机或IP地址访问站点时,
:domain=>:all
被破坏:

它看起来像一个补丁已经提交,但我无法从该页面判断它是否已经包含在任何版本中


正如您所发现的,一种解决方案是编辑/etc/hosts,使其包含localhost.localdomain之类的内容,或者除了裸主机名之外的其他内容(如lhs.me)。

在config/initializers/session\u store.rb中,将域设置为使用所有子域

Your::Application.config.session_store :cookie_store, 
                                       :key => '_example.com_session',  
                                       :domain => ".lvh.me"

确保在主机名之前包含

仅在生产环境中使用自定义会话存储配置

if Rails.env.production?
    Rails::Application.config.session_store(:cookie_store, key: '_my_session', secure: Rails.env.production?, domain: :all, tld_length: 2)
end

看看我的答案。我有“lhs.com”,但那也不起作用。您指的是TLD大小,默认情况下为2(domain.ext),但对于开发,您可以将其设置为1Stuck,但存在相同的问题,在阅读此线程后,现在我使用此主机名:为什么所有键都以“\ux”开头?我想知道如何使其在不同端口上工作。我有两个部分(部署到不同的子域)在dev的不同端口上运行