阅读cookies& cookie域名

时间:2011-09-13 12:41:11

标签: php cookies session-cookies

我有两台服务器:实时服务器(mydomain.com)和QA服务器(qa.mydomain.com)。当我设置cookie时,我将域设置为“.mydomain.com”和“.qa.mydomain.com”。其中一个名为“session_id”的cookie用于身份验证和登录。很明显,一个域的cookie不适用于另一个域。但是,由于我将点添加到域中,PHP有时会在QA服务器上读取“.domain.com”cookie,结果是我无法登录。

有没有办法让PHP读取正确的cookie?

4 个答案:

答案 0 :(得分:2)

前缀点表示它对所有子域也有效。因此.mydomain.com cookie对qa.mydomain.com也有效。

现在不只是PHP读取cookie;还有浏览器根据它们有效的域发送cookie。

由于您正在讨论会话cookie,因此您可能希望研究使用命名会话。对于我记忆中的内容,会话的名称也用在cookie的名称中。这意味着您的实时和测试环境具有不同的会话名称。

否则删除点也可以做到这一点;但我猜你确实希望它能为www.mydomain.com工作,所以我不认为这是一个解决方案;)。

答案 1 :(得分:1)

请参阅http://se2.php.net/setcookie

  

Cookie可用的域。要在example.com的所有子域(包括example.com本身)上提供cookie,您可以将其设置为“.example.com”。虽然有些浏览器会接受没有初始化的cookie。»RFC 2109要求包含它。将域设置为“www.example.com”或“.www.example.com”将使cookie仅在www子域中可用。

你说:

  

很明显,一个域的cookie在另一个域上不起作用。

.mydomain.com 匹配所有子域名时。我会删除点。

答案 2 :(得分:1)

PHP读取浏览器发送的所有cookie。由于每个.qa.domain.com主机也是.domain.com主机,因此获取所有Cookie是正常的。

您需要更改域名,或更改您的PHP代码,以便能够识别那些不应忽略的cookie。

答案 3 :(得分:0)

我不认为这是一个PHP问题。 Web浏览器应该将正确的cookie发送到适当的Web服务器。某些浏览器可能以这样的方式实现,即子域cookie也会在主域请求上发回。