我有一个指向 secure.example.com 的登录表单,它初始化会话,然后重定向到 www.example.com
重定向时,不会创建会话。返回secure.example.com,然后创建会话。这是我认为的 cookie 工作方式的限制吗?
当然,我在 session_store 中添加了 domain: :all,结果相同。
我正在使用 Ruby on Rails 3.2
我有一个指向 secure.example.com 的登录表单,它初始化会话,然后重定向到 www.example.com
重定向时,不会创建会话。返回secure.example.com,然后创建会话。这是我认为的 cookie 工作方式的限制吗?
当然,我在 session_store 中添加了 domain: :all,结果相同。
我正在使用 Ruby on Rails 3.2
我的配置很好,就像我配置的那样domain: :all
,这就是它所需要的。
我的问题是我必须在domain: :all
我的所有 cookie 中定义 ,如下所示:
cookies[:new_cookie] = { :value => "value", domain: :all }
并且在删除它们时:
cookies.delete :new_cookie, domain: :all
在此更改之后,一切都按预期工作。
只要您拥有 example.com 并正确定义您的 cookie 域,您应该没问题。关于 cookie 如何工作(或者,正如作者所说,浏览器如何实际实现它们)有一个非常好的答案:浏览器 cookie 域如何工作?
:domain
在 Rails 中,只需在设置 cookie 时传递正确的值。
您可以在两个应用程序中设置相同的 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。
这是整体架构,您可以使用此想法进行更多详细说明。