2011-12-29 54 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