2011-07-16 67 views
4

我已經設置了一個cookie就好了,該cookie位於請求標題中,但是當我在PHP超全局$_COOKIE中訪問該cookie時,它不是沒有設定。傾銷$_COOKIE只顯示其他Cookie,並且全部位於請求標題中。

如果我轉儲$_SERVER我可以看到該cookie在$_SERVER['HTTP_COOKIE']。 PHP將所有的cookies設置爲$_COOKIE,但只有一個。

什麼可能會導致這種情況,什麼是修復?

服務器運行PHP 5.3.3。

更新: 在我的index.php的頂部I var_dump($_SERVER);,然後在下一行var_dump($_COOKIE);,並且不從第二個轉儲打印預期的cookie。

UPDATE2:

這裏是我的要求

Cookie:SESSe00cd0d8b79da0906c77d52ed6e26907=2f9fhsomr2skcfmivagb1i8gj7; __utma=172891446.852439441.1310775539.1310775539.1310775539.1; __utmc=172891446; __utmv=172891446.%3A; __utmb=172891446.4.10.1310780296; OATMEAL=%9Ey%EE%C9J%956%C0%06%B3%EBZ%83%D1%80%C0%AC%D2%D0T%86%9A%2A%2A%A2E%B7f%86%D7i%C1%28%19L%1Fl%920%3CE%10%B6%C9c%1D%E3%A7H%D9%E1%29%1C%7E5%C8q%CC3%21C%0C%DC%CC%A5%F3i%10%F7%DCJjF%EE%B9%80%3C%C6Jy%A2%0E%3F%E3%BD%7B%BF%CD%84%85%91%BB3%B9%EA%CB%92%89%AC%FBc%BA%A32s%B5L%3E%DF%9B%CDk%08%DEZ%13%5Da1Q%B0%1CJ%90%AE%AF%3F%15%98%1B%E1%C1g%A9%BBzR%F5Q%82%8F%81%1A%D1%0E%87%DC%F3%3B%FF%B7%8E%09%0F%BF%DFK%A3t%D1%F3%DA_%ECKt%01%00x%D2%CCE%24%BB0%C2w%B4%82%F0Q%00O%F1v%19%11%0A%3A%BB%9Fy%B1%BC9hgy%C4%DC%DEN%C4%A4%3B%7D%E8%84h%07%E3+%0B%85y%8B%B5y%1B%FC%CE%86B%F55%ED%E0%01%EB%18%13%B0%09%CA%F9%3D%26%05%FC%A7%F8%E4%CD%3C%9E%D7%24%B1%BF%27t%B4%3C%89%D76%F0%CF%C0%D4%E7Z%A6%02%19j%D7%60%28%82%DF%DF%9C%05%25%CB%CA%04%B9%21N%D2r%A76%DD%D1%CB%97%B0%A9%13%29%3C%D6kdm%D1%14%EA%D4%1Fz%F9%CF%21i%BD%19RN%C3%8Dh%27R%15%99%13%FAv%13%8F%BBd%7B%F5%AD%D5%22%13q%13Z%F219%B9%B0_%AB%16%7B%D2%18%E3%F0%F6%9D%A4X 

那年代時下降名爲 「燕麥」 Cookie的Cookie的一部分。

UPDATE3:此PHP錯誤發音相近https://bugs.php.net/bug.php?id=52018

+0

什麼是cookie名稱? –

+0

您是否在cookie被設置之前發送輸出? – Mike

+0

用cookie更新後的帖子。不,我不應該在cookie被設置之前發送輸出。這也不是服務器設置cookie的問題,所有的客戶端網站都說cookie是正確的。 – bjeavons

回答

0

謝謝大家,但離線從這個線程又是一個設備時發送提示編碼cookie數據的base64。這工作和保持數據活着,我能夠base64解碼服務器端,並繼續。

1

你不應該在$_SERVER["HTTP_COOKIE"]使用的值。 It's not documented,所以它可能不可靠。

This message註釋爲setcookie函數可能會回答你的問題。

請注意,$ _COOKIE變量不會保存多個具有相同名稱的Cookie。 ...

+0

OATMEAL Cookie設置了域.example.org(領先期),以便發送給所有子域,但我沒有任何其他具有爲TLD或任何其他子域設置的同名Cookie的cookie。 – bjeavons

0

難道你沒有爲cookie設置正確的路徑嗎?我之前遇到過問題,因爲它不會讓我訪問cookie,因爲它自動設置爲一個奇怪的路徑。我在設置cookie時必須指定正確的路徑。

你可能已經知道這一點,但有時候事情可以隱藏在我們的鼻子下。

http://us3.php.net/manual/en/function.setcookie.php

歡呼聲, 邁克爾

+0

是的,我將它設置爲路徑爲'/'的整個域。 – bjeavons

3

你的字符串長度1099個字符。

Cookie的最大長度爲4Kb。

假設我們使用UTF-8字符,每字符4個字節,你應該能夠嘗試1024

之間

存儲使燕麥較小。小得多,讓我們知道如果這是罪魁禍首。

+1

+1人們經常會忘記UTF-8意味着一個字符不再等於一個字節。 – Spudley

+0

使用Firefox和Tamper Data擴展我手動更改Cookie標頭(也可以使用Web Developer擴展)來截斷OATMEAL,但它仍然不會顯示。 OATMEAL = foo沒有出現。 – bjeavons

0

正如其他人已經說過的,這幾乎肯定與您的cookie字符串的長度有關。你應該縮短它。

這也是值得指出的是,即使它的工作原理,有不有這麼長的cookie字符串一個很好的理由 - 整個cookie字符串被在兩個方向上爲你做的每一個HTTP請求發送。

比方說,你有一個典型的網頁,加載20幅圖像,兩個CSS文件和兩個JavaScript文件,再加上主HTML頁面本身。對於像你這樣的1K cookie字符串,對於每個單頁加載,這將是服務器帶寬(以及用戶帶寬)的額外50K。如果您擁有合理數量的流量,那麼這將快速增加,並且如果您對帶寬有任何限制或計量,則會花費您額外的資金。

其次,我不知道這是什麼燕麥餅乾含有;我沒有時間去解碼它,但它看起來很像你混淆了數據(包括添加一些故意的擾流字符)。注意,如果這個數據是不夠敏感,想混淆,那麼cookie是真的不好的地方是存放。

如果你真的需要數據的量傳遞給服務器,你應該在POST請求發送。如果PHP程序需要在隨後的頁面加載中訪問它,請將其設置在您的$_SESSION陣列中。如果您的Javascript代碼需要能夠使用它或設置它,那麼請使用Ajax請求。

+0

當然,它的架構可能不同,我並不反對,但我正在使用我的代碼。我不確定這個問題是否是cookie長度的問題,但是如果它變得不可能使用,那麼我會改變代碼。 – bjeavons

相關問題