2014-02-07 88 views
0

我已經(從客戶端返回的標準的東西有幾塊點心),看起來像這樣傳入的HTTP請求:

GET /loggedin.php HTTP/1.1 
Cookie: name=Server+Side+Name; path=/ 
Cookie: role=Role+From+DB; path=/ 
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.1; Build/JRO03C) 
Host: www.example.com 
Connection: Keep-Alive 
Accept-Encoding: gzip 

一些PHP內容如下:

<?php 

$body = "\nThe request's _SERVER['HTTP_COOKIE'] is: " . print_r($_SERVER['HTTP_COOKIE'], true); 
$body .= "\nThe request's _COOKIE is: " . print_r($_COOKIE, true); 

echo $body; 

?> 

導致下面的輸出:

The request's _SERVER['HTTP_COOKIE'] is: name=Server+Side+Name; path=/, role=Role+From+DB; path=/ 

The request's _COOKIE is: Array 
(
    [name] => Server Side Name 
    [path] => /, role=Role From DB 
) 

注意在第二個條目$_COOKIE是「路徑」而不是「角色」,其值不正確。

看起來好像在$_SERVER['HTTP_COOKIE']正確顯示正確(雖然連接)的餅乾被錯誤地解析以填充$_COOKIE但我不敢相信是這種情況。我控制所有的元素,所以我應該怎樣做才能得到正確的值到$_COOKIE

如果重要的話,這是在EC2 Amazon Linux實例上的PHP 5.3.27上。

回答

0

答案是:很容易混淆Set-CookieCookie標題。

只有Set-Cookie標題有像pathexpires選項。 Cookie標頭不會因爲這些選項在決定是否發送cookie時被客戶端使用。

我的請求在Cookie標頭中包含這些選項的原因是我試圖解決某些Android HTTP實現的問題,並且在我的代碼邏輯中混淆了標題。