在一段时间内,Cookie设置在domain
的不同值的单个网站上。这导致一些人拥有为.www.domain.com
和.domain.com
设置相同名称的Cookie。该网站旨在作为www.domain.com
访问。这是通过.htaccess规则完成的。
代码将使用.domain.com
。现在为session.cookie_domain
向前发展。
我遇到的问题是,当两个cookie都存在时,浏览器会发送两者(两者都有效)。我在标题中看到了这一点,并且在转出apache_request_headers()
时也是如此,但当我转出$_COOKIE
时,我只看到其中一个。
["Cookie"]=>
string(74) "foobar=hkej4qdnq5kismiq3kl07qv6k2; foobar=ocvn7anlu2f2k2l37nl9ou3c21"
然后......
array(1) { ["foobar"]=> string(26) "hkej4qdnq5kismiq3kl07qv6k2" }
我的会话接口read($id)
方法正在检查旧cookie,而不是我们在登录时设置的cookie。
解决此问题的最佳方法是什么?我想我可以更改会话名称/标识符并重新开始。或者可以在我的read
实现中评估Apache标头。我没有找到太多与搜索网页相关的东西,只是来自w3schools的一堆绒毛污染了结果,所以我认为这可能是一个很好的发布在这里。
答案 0 :(得分:1)
我遇到了同样的问题,并通过更改会话名称解决了这个问题。
PHP允许您访问变量$_SERVER["HTTP_COOKIE"]
并自行解析。这允许您访问cookie的两个值,但您仍然无法区分正确和错误的cookie。
除非这些cookie包含非常有价值的数据,否则我不会关心旧的值,只是开始新的。
答案 1 :(得分:1)
只需将会话名称从PHPSESSID更改为SITESESSID或您选择的其他内容。这将确保您的应用程序一起忽略旧cookie。如果会话的生命周期为0,则其为SESSION Cookie(在浏览器关闭时删除),在这种情况下,您可以在几天或一个月的实施后将会话名称更改回PHPSESSID,因为您将确定没有人有旧的饼干。
顺便说一句:浏览器没有发送两个cookie。这只是你的旧会话cookie还活着。