2011-12-29 59 views
0

我需要支持的一个centain web客户端,会在HTTP标头中两次发回Cookies标头给我的应用程序,这反过来使PHP无法读取cookie的正确值,从而忽略会话。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标头以将会话设置为正确的值?

+0

你在使用什么服务器软件? – 2011-12-29 12:14:42

+0

LAMP堆栈,没有框架。 – Pat 2011-12-29 12:56:16

回答

1

根据HTTP规范,双头部只需用逗号串接的值加在一起,使之成为:

Cookie: PHPSESSID=49af82ddf12740e6a35b15985e93d91a, PHPSESSID=49af82ddf12740e6a35b15985e93d91a 

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

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

+0

谢谢,我会尝试查看客户端是否可以快速修复 – Pat 2011-12-29 12:57:42

+0

我无法在规范中找到描述此行为的参考,可以将我链接起来吗? – Pat 2011-12-29 13:46:55

+0

*当且仅当该标题字段的整个字段值被定义为以逗号分隔的列表[即#(值)]时,具有相同字段名的多个消息标题字段可以存在于消息中。它必须能够将多个头部字段组合成一个“字段名称:字段值”对,而不改变消息的语义,方法是将每个后续字段值附加到第一个字段值,每个字段值用逗号分隔。* [ 4.2节](http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) – 2011-12-29 13:49:54