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

Update an array stored in a cookie with a new value each time a page is loaded

我试图将一组值存储在 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 没有更新?我这样做的方式正确吗?

谢谢。

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

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

这篇文章有两处错误:

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

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

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

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