我有一个登录表单,指向secure.example.com,它初始化会话,然后重定向到www.example.com如何将会话从一个子域共享到另一个子域?
重定向时,不创建会话。回到secure.example.com,然后创建会话。这是我如何使用Cookie的限制吗?
当然,我已经加入域:所有在session_store,具有相同的结果。
我使用Ruby on Rails的3.2
我有一个登录表单,指向secure.example.com,它初始化会话,然后重定向到www.example.com如何将会话从一个子域共享到另一个子域?
重定向时,不创建会话。回到secure.example.com,然后创建会话。这是我如何使用Cookie的限制吗?
当然,我已经加入域:所有在session_store,具有相同的结果。
我使用Ruby on Rails的3.2
我的配置很好,因为我配置了domain: :all
,这就是它所需要的。
在我的情况的问题是,我必须定义在我所有的饼干domain: :all
,就像这样:
cookies[:new_cookie] = { :value => "value", domain: :all }
和删除它们时:
cookies.delete :new_cookie, domain: :all
此更改后,一切正常如预期。
您拥有example.com和正确定义Cookie域,您应该可以,只要确定。有一个很好的答案,饼干是如何工作的(或如作者说,浏览器实际上是如何实现它们)在这里:How do browser cookie domains work?
在轨,设置cookie时,只是通过适当的值:domain
。
您可以在两个应用程序中设置相同的session_key。在appA environment.rb中更改session_key,像这样
Rails::Initializer.run do |config|
...
config.action_controller.session = {
:session_key => '_portal_session',
:secret => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415'
}
...
end
在AppB中执行相同操作。 (记得用同样的秘密)
现在你已经共享会话。假设您使用restfull_authentication,它会设置一个名为user_id的会话变量。当您在appA中进行身份验证时,它会在会话中设置user_id。现在,在appB中,您只需验证会话中是否存在user_id。
这是总体架构,可以更详细使用这种想法。
我一直在寻找“domain::all”解决方案很长一段时间。这对我很好。谢谢! – haejeong87