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

Posted

技术标签:

【中文标题】为啥我的标题中有两个会话 ID?【英文标题】:Why do I have two session id in my header?为什么我的标题中有两个会话 ID? 【发布时间】:2012-01-15 00:12:50 【问题描述】:

我正在使用 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

【问题讨论】:

可能想看看接受度 请注意,在我有一个足够好的答案之前,我可以接受一个答案...接受的答案不仅是增加分数;) 如果没有看到与 cURL 查询相关的 PHP 代码,任何人都无法回答这个问题。 请注意,此行为也在浏览器中重现 @Trent 这不一定是问题,因为后一个值会覆盖第一个值。只要您的会话保持正确,我就不会担心。然而,虽然我从未见过它,但我猜这可能是由多次调用session_start() 或覆盖会话ID 引起的。确实,我们需要查看代码才能猜测问题出在哪里 【参考方案1】:

来自Zend 1.11 documentation:

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

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

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

【讨论】:

【参考方案2】:

您的服务器应用程序发出了两次 Set-Cookie 标头。这可能来自任何地方,如果不查看所有代码就无法判断。

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

【讨论】:

以上是关于为啥我的标题中有两个会话 ID?的主要内容,如果未能解决你的问题,请参考以下文章

为啥php每次在测试环境(WAMP)中生成相同的会话ID?

为啥 Apache Livy 会话显示应用程序 id 为 NULL?

Spring Boot 会话管理——为啥会有两个 sessionRegistry 实例?

为啥多点连接如此缓慢?

为啥我的 ipa 中有两个 dsym 文件?

用户角色 - 为啥不存储在会话中?