2013-03-08 45 views
-1

不知道我做錯了......setcookie()函數不工作

這裏是用來設置的Cookie的網頁: https://www.ni-dieu-ni-maitre.com/test.php

$domain = "ni-dieu-ni-maitre.com"; 
$articleid = "test"; 

$lastviewedarticles = array(); 

if (isset($_COOKIE["viewed_articles"])) { 
    $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]); 
} 

if (!in_array($articleid, $lastviewedarticles)){ 
    $count = count($lastviewedarticles); 
    if($count>=29) 
     array_shift($lastviewedarticles); 
    $lastviewedarticles[] = $articleid; 
} 
setcookie('viewed_articles', serialize($lastviewedarticles), time()+60*60*24*30, '/', '.' . $domain); 

接着這個頁面讀取cookie和輸出內容: https://www.ni-dieu-ni-maitre.com/test2.php

if (isset($_COOKIE["viewed_articles"])) { 
    $lastviewedarticles = unserialize($_COOKIE["viewed_articles"]); 
} 
echo "cookie is currently:<br>"; 
print_r($lastviewedarticles); 

正如你可以在測試頁面看到,餅乾總是空

+0

仍在尋找解決方案... – anarchOi 2013-03-08 21:06:14

回答

1
... '.$domain'); 
    ^ ^

您可以使用單引號,這意味着,PHP是不會從變量與各自的價值,以取代$domain

Docs

注:不像雙引號和定界符語法,變量和 特殊字符的轉義序列將在單引號字符串中出現 時不會擴展。

而且因爲你不從.$domain餅乾訪問Cookie是沒有確定:

Docs

該cookie可用的域名至。將域設置爲 'www.example.com'將使cookie在www子域 及更高子域中可用。可用於較低域的Cookie可用於較高的子域,如 'example.com',如 'www.example.com'。舊版瀏覽器仍然實施已棄用的» RFC 2109可能需要領先。以匹配所有子域。

它更改爲:

... '.'.$domain); 
+0

剛剛更新了代碼...仍然無效:( setcookie('viewed_articles',serialize($ lastviewedarticles),time()+ 60 * 60 * 24 * 30 ,'/','。'。$ domain); – anarchOi 2013-03-08 09:40:45

+0

@anarchOi您可以發佈什麼'print_r'顯示?您可以使用'var_dump'而不是'print_r'? – Leri 2013-03-08 09:51:06

+0

print_r = Array().... var_dump = array(0){} – anarchOi 2013-03-08 10:08:47

0

作爲RFC 2109,所述domain參數具有與起始的點被設置(見http://php.net/setcookie)。請嘗試一下,你的代碼似乎沒問題。請從'.$domain.'中刪除單引號。

+0

'RFC 2109'已棄用。 – Leri 2013-03-08 07:55:31

+0

真的嗎?所以我很抱歉 - 沒有注意到。 – sebastian 2013-03-08 07:56:46

+0

是:「舊版瀏覽器仍在實施已棄用的»RFC 2109可能需要領先。以匹配所有子域名。「# – Leri 2013-03-08 07:58:19