我有一個項目可以在本地服務器上運行,但不能在我的生產服務器上運行,因爲服務器沒有看到cookie。我做了再現該服務器上的問題的代碼的最小版本:
<?php
if(!isset($_COOKIE['foo'])){
setcookie('foo', 'bar', time() + 7*24*60*60, '/');
echo "Cookie was not found, so we just created it.";
} else {
echo "Cookie was found!";
}
?>
無論多少次,我刷新此頁面,我總是得到「未找到」的消息。每當我嘗試登錄$_COOKIE
變量時,我都會得到一個空數組。但是:
- 存在Cookie在瀏覽器中,並與
- 設置cookie,並在同一個文件讀取(它不是與
path
問題) - 請求正確發送沒有
setcookie
之前輸出,並且該文件被編碼爲UTF8無BOM
我認爲這是一個服務器的配置問題,因爲代碼本地工作,但我不知道去哪裏找。有沒有人看過這個,你知道是什麼原因造成的嗎?
如果您需要更多信息,請告訴我,我會將其添加到我的問題。謝謝!
任何涉及吞噬cookie的CDN和/或緩存服務器...? – deceze
檢查您的服務器的php.ini以獲取'variables_order'指令。 「C」從它丟失了嗎? http://php.net/manual/en/ini.core.php#ini.variables-order –
@deceze設置了一個Varnish緩存,但是這個頁面沒有被緩存。你認爲可以吞下餅乾嗎? @邁克爾,感謝您的建議,我檢查了一下,似乎沒問題:'variables_order = EGPCS' – blex