【问题标题】:PHP cookie handlingPHP cookie 处理
【发布时间】:2012-01-29 20:43:15
【问题描述】:

我需要支持的一个网络客户端在 HTTP 标头中两次将 Cookies 标头发送回我的应用程序,这反过来又使 PHP 无法读取 cookie 的正确值,从而忽略了会话。

这是我看到的请求的相关部分:

GET / HTTP/1.1
Cache-Control: max-age=0
Accept-Language: en-US
Cookie: PHPSESSID=49af82ddf12740e6a35b15985e93d91a
Connection: Keep-Alive
Cookie: PHPSESSID=49af82ddf12740e6a35b15985e93d91a
[...] Other irrelevant headers

我有两个问题:

这是一个 PHP 错误吗?还是当客户端两次发送相同的标头时行为未定义?

是否有一种快速的解决方法可以让事情正常工作,而无需手动解析 HTTP 标头,以便我可以在我的应用程序中读取 cookie(和会话)的正确值?还是我应该手动解析 HTTP 标头以将会话设置为正确的值?

【问题讨论】:

  • 你用的是什么服务器软件?

标签: php http cookies


【解决方案1】:

根据 HTTP 规范,双标头只是将值与逗号连接在一起,使其成为:

Cookie: PHPSESSID=49af82ddf12740e6a35b15985e93d91a, PHPSESSID=49af82ddf12740e6a35b15985e93d91a

PHP 应该能够解析 cookie,但是当有两个会话 ID 时,会话的行为是不确定的。

我强烈建议修复客户端。如果这不是一个选项,您将不得不手动解析标题。

【讨论】:

  • 谢谢,我试试看能不能快速修复客户端
  • 我无法在规范中找到描述这种行为的参考资料,你能把我链接起来吗?
  • 当且仅当该标头字段的整个字段值被定义为逗号分隔的列表 [即,#(值)]。必须可以通过将每个后续字段值附加到第一个字段值,每个字段值以逗号分隔,将多个标题字段组合成一个“字段名称:字段值”对,而不改变消息的语义。 i> Section 4.2
  • 感谢@Tom,客户的供应商已经承认问题出在他们这边,并且正在开发补丁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 2018-12-08
  • 1970-01-01
  • 2011-05-05
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多