2013-09-25 61 views
1

我有一個應該設置cookie的腳本。在網絡服務器上,它工作得很好,但是當我在本地測試時,它沒有設置。setcookie()不在本地設置cookie

的摘錄:

setcookie('sid', 'nv48thnuf39sonv', 0, '/', $_SERVER['HTTP_HOST']); 

echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 

沒有之前的setcookie呼叫輸出。

在服務器上,第一次加載時顯示爲(empty),第二次加載時顯示爲nv48thnuf39sonv(預期行爲)。然而,它通過http://localhost/,它說(empty),並永遠不會改變,無論我搗爛多少次F5

有誰知道什麼可能會導致cookie不被設置?

+0

爲什麼你甚至不需要'...,「/」,$ _ SERVER [「HTTP_HOST」]) ;'你可以忽略它們,因爲它們有一個默認值 – Yang

回答

0

這是你的cookie域。

它至少需要兩個點(.),否則您的瀏覽器將認爲它無效,從而不存儲cookie。繞過它最簡單的方法是簡單地將Cookie域設置爲null當你$_SERVER['HTTP_HOST']爲localhost:

$cookieDomain = $_SERVER['HTTP_HOST'] == 'localhost' ? null : $_SERVER['HTTP_HOST']; 
setcookie('sid', 'nv48thnuf39sonv', 0, '/', $cookieDomain); 
echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 
+0

這很好運行現在我想知道,是否有一種方法來指定一個cookie的域本地主機,將工作?我想在本地開發,而不必依賴像這樣的開關。 –

+0

我實際上使用了一個名爲'dev.local'的自定義域,它已經添加到我的主機文件中,因此它將在本地解析。如果域名不好,瀏覽器會自動將'.'加到前面,所以雖然它可能不會幫助'localhost','dev.local'會變成'.dev.local',這是一個有效的cookie域名。 – SamT