如何在PHP中将数组添加到cookie中?

时间:2017-12-06 10:59:39

标签: php arrays cookies

我正在尝试将数组存储到cookie中。我将我的数组产品项存储在cookie数组中,但它会抛出错误。

    $products = array();
    $item = array($id => $name);
    print_r($item);
    $products[] = $item;
    setcookie('products',json_encode($products),strtotime( '+1 day' ));
    var_dump($_COOKIE['products']);

上面的代码打印

  

阵列(       [4] => Rug Rat)
注意事项:未定义的索引:产品在    d:\ XAMPP \ htdocs中\项目\包括\类\ products.php   在线 43
NULL

1 个答案:

答案 0 :(得分:3)

将响应发送到客户端时设置Cookie。这意味着在下一个请求之前,您将无法从PHP代码访问它们。请参阅setcookie()函数的文档,常见陷阱部分:

  

在下次加载可以看到Cookie的网页之前,Cookie才会显示。要测试cookie是否已成功设置,请在cookie过期前检查下一个加载页面上的cookie。过期时间通过expire参数设置。调试cookie存在的一种好方法是简单地调用print_r($ _ COOKIE);。

http://php.net/manual/en/function.setcookie.php

因此,除非您echo发生任何事情,或执行导致响应标头发送的任何其他内容,否则您应该在刷新页面后看到var_dump ed cookie内容。在您的代码中,调用print_r($item);之前会setcookie(),因此您可能会收到headers already sent警告,并且cookie从未设置过。

无论如何,假设设置了数组索引很少是安全的,特别是在超全局中,例如$_GET$_POST$_COOKIE等。您应该始终检查如果索引确实已设置,请使用isset()array_key_exists