2016-07-11 48 views
0

我有一個PHP代碼問題。正如你所看到的,我從其他頁面獲得id。我想要將這些id的數據保存在Cookie中。我能夠做到這一點,但我有一個問題。有一個數組作爲cookie值

當我設置超時(例如20秒)和刷新頁面:每20秒它工作正常,但如果我在20秒內刷新它,它給了我下面的錯誤。

Fatal error: [] operator not supported for strings

我不知道爲什麼;能否請你幫忙?

<?php 
 
$ID = is_numeric($_GET['ID']) ? $_GET['ID'] : 1; 
 

 
$cookie_name = "favoritepost"; 
 

 
if (isset($_COOKIE[$cookie_name])) { 
 
    $kookie = $_COOKIE[$cookie_name]; 
 
} else { 
 
    $kookie = array(); 
 
} 
 
if (! in_array($ID, $kookie)) { 
 
    $kookie[] = $ID; 
 
} 
 

 
setcookie($cookie_name, serialize($kookie), time() + (20), "/"); // 86400 = 1 day 
 
?> 
 
<html>

+0

和「這個錯誤」是......? –

+0

@ Marc B謝謝你的回答,就像我說的問題,它給了我這個錯誤 致命錯誤:[]運算符不支持字符串 – Malekian

+1

您從未反序列化您的數組。來自$ _COOKIES的一切都是一個字符串。 –

回答

1

按我最後的答案https://stackoverflow.com/a/38307347/2310830

<?php 
$ID = is_numeric($_GET['ID']) ? $_GET['ID'] : 1; 

$cookie_name = "favoritepost"; 

if (isset($_COOKIE[$cookie_name])) { 
    $kookie = unserialize($_COOKIE[$cookie_name]); 
} else { 
    $kookie = array(); 
} 
if (! in_array($ID, $kookie)) { 
    $kookie[] = $ID; 
} 

setcookie($cookie_name, serialize($kookie), time() + (86400 * 30), "/"); // 86400 = 1 day 
?> 
<html> 
+1

爲什麼只有提出更多問題才能理解答案? – Devon

+0

是的男人我不知道爲什麼,但我沒有看到你的代碼中的這部分 $ kookie = unserialize($ _ COOKIE [$ cookie_name]); 真的很soori – Malekian

+0

@Devon哦wo wo beg yer pardon – RiggsFolly

0

陣列被串行化時,它被存儲在cookie中。所以當你檢索它時,它是一個字符串,而不是一個數組。你需要反序列化它,你更增添它之前:

$kookie = unserialize($_COOKIE[$cookie_name]); 
相關問題