【问题标题】:Update an array stored in a cookie with a new value each time a page is loaded每次加载页面时使用新值更新存储在 cookie 中的数组
【发布时间】:2015-08-01 07:21:11
【问题描述】:

我试图在 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 没有更新?我是否以正确的方式处理这件事?

谢谢。

【问题讨论】:

  • 您实际上需要销毁旧 cookie 并制作一个“新”cookie。
  • 使用setcookie('my_cookie', $new_exp, time()+3600);。 $new_exp 是单引号。所以值没有被执行
  • @TamilSelvan 我删除了单引号,但问题仍然存在。
  • 我运行你的代码,一切正常。
  • 我刚刚通过从stackoverflow复制代码进行了测试,它可以工作!不知道那里发生了什么,我想也许我解决了简化代码以在此处发布的问题。谢谢!

标签: php cookies refresh setcookie


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这篇文章有两个错误:

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

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

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

      【讨论】:

      • 我删除了单引号。我已经使用array_push$random_value 添加到$new_value 数组(名称从$new_exp 更改为一致),所以我想添加这个更新后的数组,而不仅仅是$random_value 的值。
      • 没关系,我很困惑,因为 $new_value 和 setcookie 在同一行
      猜你喜欢
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2020-06-17
      • 2018-07-02
      • 2013-10-04
      • 1970-01-01
      • 2015-06-10
      • 2022-01-20
      相关资源
      最近更新 更多