我有两个服务器:实时服务器(mydomain.com)和QA服务器(qa.mydomain.com)。当我设置cookie时,我将域分别设置为".mydomain.com“和".qa.mydomain.com”。其中一个称为"session_id“的cookies用于身份验证和登录。很明显,一个域的cookie在另一个域上不起作用。但是,当我在域名前面加上点时,PHP有时会读取QA服务器上的".domain.com“cookie,结果导致我无法登录。
有没有办法让PHP读取正确的cookie?
发布于 2011-09-13 20:46:53
请参阅http://se2.php.net/setcookie
cookie可用于的域。要使cookie在example.com的所有子域(包括example.com本身)上都可用,则需要将其设置为“.example.com”。虽然有些浏览器会接受不带首字母.的cookie,但RFC2109要求包含它。将域设置为“www.example.com”或“.www.example.com”将使cookie仅在www子域中可用。
你可以说:
很明显,一个域的cookie在另一个域上不起作用。
当.mydomain.com 应匹配所有子域时。我会去掉那个圆点。
发布于 2011-09-13 20:47:40
加上点前缀意味着它对所有子域也有效。因此,.mydomain.com cookie对qa.mydomain.com也有效。
现在,不仅仅是PHP读取cookie,浏览器也会根据cookie的有效域来发送cookie。
由于您具体讨论的是会话cookie,因此可能需要考虑使用命名会话。据我所知,cookie的名称中也使用了会话的名称。这意味着您的活动环境和测试环境会有一个不同的会话名称。
否则删除圆点也能起到作用;但我猜您确实希望它适用于www.mydomain.com,所以我不认为这是一个解决方案;)。
发布于 2011-09-13 20:48:10
PHP读取浏览器发送的所有cookie。由于每个.qa.domain.com主机也是一个.domain.com主机,因此获取所有cookie是正常的。
您需要更改域名或更改PHP代码,以便能够识别应该忽略的cookie和不应该忽略的cookie。
https://stackoverflow.com/questions/7402028
复制相似问题