2016-07-11 68 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]); 
相关问题