2015-05-07 26 views
1

对于domain,一段时间cookie在单个站点上设置了不同的值。这导致一些人使用同名设置的Cookie,这两个名称均为.www.domain.com.domain.com。该网站打算作为www.domain.com访问。这是通过.htaccess规则完成的。代码将使用.domain.com。现在为了进一步session.cookie_domain浏览器发送两个Cookie - PHP的会话处理程序读取错误

我遇到的问题是,当两个cookie都存在时,浏览器发送两个(都是有效的)。我看到这是如此在标题中,而且当倾销出apache_request_headers(),但是,当我倾倒出$_COOKIE我只看到其中之一。

["Cookie"]=> 
    string(74) "foobar=hkej4qdnq5kismiq3kl07qv6k2; foobar=ocvn7anlu2f2k2l37nl9ou3c21" 

然后......

array(1) { ["foobar"]=> string(26) "hkej4qdnq5kismiq3kl07qv6k2" } 

我的会话界面read($id)方法检查旧Cookie,而不是我们在登录时设置的一个。

解决这个问题的最佳方法是什么?我想我可以改变会话名称/标识符并重新开始。或者可以评估我的read实现中的Apache头文件。我没有发现很多与搜索网站相关的东西,只是一些来自w3schools的绒毛污染了结果,所以我认为这可能是一个很好的发布在这里。

+0

我有同样的问题,并通过更改会话名称解决它。 –

回答

1

我有同样的问题,并通过更改会话名称解决它。

PHP允许你访问变量$_SERVER["HTTP_COOKIE"]并自己解析它。这允许你访问cookie的两个值,但是你仍然不能分辨正确和错误的cookie。

除非这些cookie包含真正有价值的数据,否则我不会关心旧的值,只是开始新的。

+0

有道理。我曾经这样做过一次,但相信我仍然有一个条件,在那里确定域使用cookie ...打算让应用程序使用www /非www前缀的不同方法。支持这一点,所以我应该有一个一致的域设置前进。 – ficuscr

1

只需将会话名称从PHPSESSID更改为SITESESSID或您选择的其他东西。这将确保您的应用程序一起忽略旧的Cookie。如果会话的生命周期为0,那么它的一个SESSION Cookie(在浏览器关闭时会被删除),在这种情况下,您可以在几天或一个月的实施后将会话名称更改回PHPSESSID,因为您可以确定没有人拥有旧的cookie。

BTW:浏览器不发送两个cookie。这只是你的旧会话cookie仍然活着。

+0

请求标题显示正在发送两个cookie。不知道我得到了你所做的区别。通过更改会话名称(而不是重新创建愚蠢饼干的根本原因),达成了相同的结论是最好的解决方案。 – ficuscr

+1

你是对的..浏览器将发送两个饼干..我的意思是服务器将只发送一个cookie创建会话...我把浏览器与服务器搞混了哈哈 –