每次加载页面时,使用新值更新存储在cookie中的数组

时间:2015-07-31 22:22:17

标签: php cookies refresh setcookie

我试图保存一个存储在cookie中的值数组,并在每次加载页面时使用新值更新该cookie,但是我无法让数组更新。这是我到目前为止所得到的:

我已经设置了一个包含四个值的数组,并且我在每个页面加载时选择数组中的随机值。

// Store values in array
$values = array(
    0 => 'A',
    1 => 'B',
    2 => 'C',
    3 => 'D'
);

// Get a random value for this page load
shuffle($values);
$random_value = $values[0];

然后检查cookie是否已设置,如果尚未设置(例如,第一次加载页面),我将cookie设置为存储值,使用JSON将值存储在阵列。

// Check if cookie has been set
if (!isset($_COOKIE["my_cookie"])) {
    // Set cookie to current value
    $init_value = array($random_value);
    $init_value = json_encode($init_value, true);
    setcookie('my_cookie', $init_value, time()+3600);
}

然后我有一个else语句,它将在设置cookie时触发(例如每个后续页面加载),它获取cookie数组,将当前随机值添加到数组的末尾,并尝试存储更新数组作为cookie的新值。

else {
    // Get cookie value
    $prev_value = $_COOKIE["my_cookie"];
    $prev_value = stripslashes($prev_value);
    $prev_value = json_decode($prev_value, true);
    // Add current value to array and set cookie again
    array_push($prev_value, $random_value);
    $new_value = json_encode($prev_value, true);
    setcookie('my_cookie', $new_value, time()+3600);
}

在尝试使用最后一块代码中的新值更新cookie之前,一切都很顺利。该值将添加到数组中,但该数组不会设置为cookie。

有谁能告诉我为什么cookie没有更新?我能以正确的方式解决这个问题吗?

感谢。

3 个答案:

答案 0 :(得分:1)

在这里试过你的代码,一切都很完美。尝试清除浏览器上的cookie,可能只是本地问题

答案 1 :(得分:0)

您应该为setcookie()设置路径,因为没有它可能会出现并发症。此外,您已将变量括在单引号中,因此它永远不会被评估,只是被视为文本,即...

setcookie('my_cookie', $new_exp, time()+3600, '/');

答案 2 :(得分:0)

这件事有两件事:

setcookie('my_cookie', '$new_exp', time()+3600);

首先,我相信你的意思是在这里使用双引号(否则不会进行评估)。其次,在你定义它之前使用$ new_exp它不会总是为null吗?我相信你的意思是这样做(如果我弄错的话,请纠正我)

setcookie('my_cookie', "$random_value", time()+3600);