我试图保存一个存储在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没有更新?我能以正确的方式解决这个问题吗?
感谢。
答案 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);