将数组作为cookie值

时间:2016-07-11 16:55:17

标签: php cookies

我遇到了PHP代码问题。如您所见,我从另一个页面获得id。我想基于Cookie将这些id保存在数组中。我能够做到这一点,但我有一个问题。

当我设置超时(例如20秒)和刷新页面时:每20秒它工作正常,但如果我在20秒内刷新它,它会给我下面的错误。

  

致命错误:字符串

不支持[]运算符

我不知道为什么;你能帮忙吗?



<?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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分: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 :(得分:0)

当数组存储为cookie时,序列化。所以当你检索它时,它是一个字符串,而不是一个数组。在添加更多内容之前,需要对其进行反序列化:

$kookie = unserialize($_COOKIE[$cookie_name]);