Ruby on rails 如何将会话从一个子域共享到另一个子域?

Ruby on rails 如何将会话从一个子域共享到另一个子域?,ruby-on-rails,cookies,ruby-on-rails-3.2,session-cookies,Ruby On Rails,Cookies,Ruby On Rails 3.2,Session Cookies,我有一个指向secure.example.com的登录表单,它初始化会话,然后重定向到www.example.com 重定向时,不会创建会话。返回secure.example.com,然后创建会话。这是我认为的cookies工作方式的限制吗 当然,我添加了domain::all in session_store,结果是一样的 我使用的是RubyonRails3.2只要您拥有example.com并正确定义cookie域,就应该可以了。关于cookies是如何工作的(或者,正如作者所说,浏览器是如

我有一个指向secure.example.com的登录表单,它初始化会话,然后重定向到www.example.com

重定向时,不会创建会话。返回secure.example.com,然后创建会话。这是我认为的cookies工作方式的限制吗

当然,我添加了domain::all in session_store,结果是一样的


我使用的是RubyonRails3.2

只要您拥有example.com并正确定义cookie域,就应该可以了。关于cookies是如何工作的(或者,正如作者所说,浏览器是如何实现它们的),这里有一个非常好的答案:


在rails中,设置cookie时只需为
:domain
传递正确的值。

您可以在两个应用程序中设置相同的会话密钥。在appA environment.rb中更改会话密钥,如下所示

Rails::Initializer.run do |config|
  ...  
   config.action_controller.session = {
   :session_key => '_portal_session',
   :secret      => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415'
   }
   ...
   end
在AppB中执行同样的操作。(记住使用相同的秘密)

现在您有了共享会话。假设您使用restfull_身份验证,它会设置一个名为user_id的会话变量。当您在appA中进行身份验证时,它会在会话中设置user_id。现在,在appB中,您只需验证会话中是否存在用户id


这是总体架构,您可以使用此想法详细说明。

我的配置很好,因为我配置了
domain::all
,这就是它所需要的

我的问题是,我必须在所有cookie中定义
域::all
,如下所示:

cookies[:new_cookie] = { :value => "value", domain: :all }
删除时:

cookies.delete :new_cookie, domain: :all
更改后,一切正常。

我一直在寻找“domain::all”解决方案。这对我很有用。谢谢