为什么我的标题中有两个会话ID?

时间:2011-12-07 13:28:46

标签: php zend-framework session session-cookies

我正在使用PHP5.3,Apache 2.2和Zend Framework 1.11,当我使用curl执行请求时,我得到了两个具有两个不同会话ID的Set-Cookie标头。

有什么想法吗?

> POST /api/register HTTP/1.1
> Authorization: Basic Ymd1ZXJ0eQ==
> Host: api.domain.tld
> Accept: */*
> Content-Length: 66
> Content-Type: application/x-www-form-urlencoded
> 
< HTTP/1.1 200 OK
< Date: Wed, 07 Dec 2011 13:27:07 GMT
< Server: Apache
< X-Powered-By: PHP/5.3.8
< Set-Cookie: SESSID=vtvackh55bj1up3ouoq4bhk545; expires=Thu, 06-Dec-2012 19:15:53 GMT; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Set-Cookie: SESSID=79a1g98e0pkqlq8fo7elpe9492; expires=Thu, 06-Dec-2012 19:15:53 GMT; path=/
< Vary: Accept-Encoding,User-Agent
< Content-Length: 128
< Content-Type: application/json

2 个答案:

答案 0 :(得分:1)

您的服务器应用程序两次发出Set-Cookie标头。这可以来自任何地方,如果没有看到所有代码就无法分辨。

寻找处理会话处理的事情。如果涉及第三方代码,请将其禁用并查看问题是否仍然存在。

答案 1 :(得分:0)

来自Zend 1.11 documentation

  

默认情况下,Zend_Auth使用PHP会话从成功的身份验证尝试中提供身份的持久存储。

也许您在某个地方使用了AuthAdapter来启动会话,后来又试图自己操作它,以另一个具有不同会话ID的会话开始。

我在Zend 2中遇到了这个问题。
我首先使用AuthenticationService进行身份验证,并在成功通过身份验证后尝试使用Zend Session Container来操纵会话。
我已经使用会话容器来显式regenerateId()并设置了一些其他标头,例如安全的,http_only,结果我有两个像您这样的会话标头。