我有两台服务器:实时服务器(mydomain.com)和QA服务器(qa.mydomain.com)。当我设置cookie时,我将域设置为“.mydomain.com”和“.qa.mydomain.com”。其中一个名为“session_id”的cookie用于身份验证和登录。很明显,一个域的cookie不适用于另一个域。但是,由于我将点添加到域中,PHP有时会在QA服务器上读取“.domain.com”cookie,结果是我无法登录。
有没有办法让PHP读取正确的cookie?
答案 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也会在主域请求上发回。