跨子域Cookie在子子域上不能按预期工作

时间:2013-09-17 08:03:52

标签: php session cookies subdomain

我正在使用系统登录使用子域的多个子域的站点。我有这个系统的开发和实时版本,但是我遇到了奇怪的行为。

所以,设置是我有以下内容:

开发环境:

  • dev.mydomain.com
  • sub1.dev.mydomain.com
  • sub2.dev.mydomain.com

直播环境:

  • live.mydomain.com
  • sub1.live.mydomain.com
  • sub2.live.mydomain.com

作为登录过程的一部分,我使用以下行来设置cookie:

setcookie("LoggedIn", 1, 0,'/','.mydomain.com');

一切正常,我可以登录一次并访问所有内容,但是我想限制它,这样如果我登录测试系统,那么我没有登录到实时系统,反之亦然。

我希望解决方案是:

setcookie("LoggedIn", 1, 0,'/','.test.mydomain.com');

setcookie("LoggedIn", 1, 0,'/','.live.mydomain.com');

取决于系统。

但是,使用此方法我可以独立登录test.mydomain.com和live.mydomain.com,但我无法登录子子域(sub1.test.mydomain.com,sub2。等)。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

可能是因为same-origin-policy。请仔细阅读。

答案 1 :(得分:0)

我完全同意您的期望,子域名cookie应优先于顶级域名,但在大多数网络框架中,您不能拥有重复的Cookie ID,因此即使您将Cookie域设置为顶级域名,子域名仍然有效,所以我认为最安全的解决方案是你应该尝试更改该特定域的cookie ID,通常我把它作为变量放在应用程序配置中