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

如何在PHP中将数组添加到cookie中?,php,arrays,cookies,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['pr

我正在尝试将数组存储到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] =>地毯鼠)
注意:未定义索引:产品在 D:\xampp\htdocs\projects\includes\classes\products.php 第43行


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

在下一次加载cookie应该可见的页面之前,cookie将不可见。要测试cookie是否成功设置,请在cookie过期之前在下一个加载页面上检查cookie。Expire time通过Expire参数设置。调试COOKIE存在的一个好方法是简单地调用print_r($_COOKIE)

因此,除非您
echo
任何操作,或者执行任何其他导致发送响应头的操作,否则在刷新页面后,您应该会看到
var\u dump
ed cookie内容。在您的代码中,有
print\r($item)setcookie()
之前,可能会收到一条
标题已发送的警告,并且cookie从未设置


无论如何,假设设置了数组索引是不安全的,特别是在超全局中,如
$\u GET
$\u POST
$\u COOKIE
,等等。您应该始终使用
isset()进行检查
数组\u key\u存在
如果确实设置了索引。

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

在下一次加载cookie应该可见的页面之前,cookie将不可见。要测试cookie是否成功设置,请在cookie过期之前在下一个加载页面上检查cookie。Expire time通过Expire参数设置。调试COOKIE存在的一个好方法是简单地调用print_r($_COOKIE)

因此,除非您
echo
任何操作,或者执行任何其他导致发送响应头的操作,否则在刷新页面后,您应该会看到
var\u dump
ed cookie内容。在您的代码中,有
print\r($item)setcookie()
之前,可能会收到一条
标题已发送的警告,并且cookie从未设置


无论如何,假设数组索引已设置是不安全的,特别是在超全局中,如
$\u GET
$\u POST
$\u COOKIE
,等等。如果确实设置了索引,则应始终使用
isset()
数组密钥
进行检查。

我正在使用ajax更新COOKIE。它为每个请求抛出相同的错误。不仅仅是第一个请求。我尝试在第一次请求后重新加载页面,但它会在
setcookie()
之前为您调用的ajax请求抛出相同的错误。删除
print\r()
,cookie现在应该可以工作了。我正在使用ajax更新cookie。它为每个请求抛出相同的错误。不仅仅是第一个请求。我尝试在第一次请求后重新加载页面,但它会在
setcookie()
之前为您调用的ajax请求抛出相同的错误。删除
print\r()
,cookie现在应该可以工作了。