【问题标题】:How to store a php array inside a cookie?如何在 cookie 中存储 php 数组?
【发布时间】:2022-01-08 02:54:51
【问题描述】:

我正在尝试使用 cookie 创建一个 php 待办事项列表,但是我正在努力将 cookie 存储在一个数组中,以便我可以添加多个 cookie。

当我提交表单时,添加了一个 cookie,但是当我去添加另一个时,第一个被替换。

我想将 cookie 存储在一个变量中,将其推送到一个数组中,然后将其保存到列表的末尾,而不是替换当前的 cookie。

这是我目前的代码:

if (isset($_POST['submit'])) {

    $task = htmlentities($_POST['task']);

    $tasks = array ();

    if(isset($_COOKIE[$task])) {

        array_push($tasks, $task);

        echo $_COOKIE[$task];
        
    } else {

    }

    setcookie('task', $task, time() + 3600);

    header('Location: index.php');
}

我不确定我到底哪里出错了,有人可以帮忙吗?

【问题讨论】:

    标签: php arrays variables cookies


    【解决方案1】:

    当您存储具有相同名称的 cookie 时,它​​会被覆盖。您似乎还存储了单个任务而不是数组。如果您想安全地存储数组,可以尝试将其存储为 JSON。

    看起来像这样:

    if (isset($_POST['submit'])) {
        
        $task = htmlentities($_POST['task']);
    
        //Check if the cookie exists already and decode it if so, otherwise pass a new array
        $tasks = !empty($_COOKIE['tasks']) ? json_decode($_COOKIE['tasks']) : [];
        //if(isset($_COOKIE[$task])) {
    
            array_push($tasks, $task);
    
          //  echo $_COOKIE[$task];
            
        //}
    
        $encodedTasks = json_encode($tasks);
    
        setcookie('task', $encodedTasks, time() + 3600);
    
        header('Location: index.php');
    }
    

    您似乎正在检查 post 变量的值是否是数组中的键,而不是使用您在 setcookie 中设置的“任务”键。当您将解码数组或空数组作为“任务”传递时,您不需要查看数组是否再次存在

    【讨论】:

      【解决方案2】:

      您的代码有一些问题。首先,您不能在 cookie 中存储数组,只能存储字符串。您可以做的是在设置 cookie 时将其转换为 JSON,并在获取它时对其进行解码。此外,当推送到您的阵列时,您推送的阵列会在每次请求时重置。为了解决这个问题,首先从 cookie 中获取数据。我会使用这样的东西:

      const COOKIE_NAME = 'tasks';
      
      $tasks = ['one', 'two'];
      setcookie(COOKIE_NAME, json_encode($tasks));
      
      $newTask = 'another task';
      
      if (isset($_COOKIE[COOKIE_NAME])) {
          $tasks = json_decode($_COOKIE[COOKIE_NAME], true);
          array_push($tasks, $newTask);
          setcookie(COOKIE_NAME, json_encode($tasks));
      }
      
      var_dump(json_decode($_COOKIE[COOKIE_NAME], true)); // Every request after the first time a cookie is set "another task" is added to the cookie. 
      

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        • 2012-07-08
        • 1970-01-01
        • 2012-02-20
        • 2010-12-29
        相关资源
        最近更新 更多