在 cookie 中存储一个完整的数组

Store a complete array in a cookie

我有以下数组:

Array ( [0] => 1 [1] => 1 [2] => 3 [3] => 6 )

我想将其存储在 cookie 中。这是我试过的代码:

$cart_array = Array ( [0] => 1 
          [1] => 1 
          [2] => 3 
          [3] => 6 );

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

当我使用 print_r($_Cookie) 显示 cookie 的内容时,这是我得到的:

Array ( [cart] => Array ( [0] => 6 [id] => 2 ) [_ga] => GA1.1.499529088.1424453778 [PHPSESSID] => aj8p5l5ph77n04tab50i83ie34 )

而不是我插入cookie的数组。请协助

我认为您正在寻找序列化:

<?php
$a = array(1 => 'a', 2 => 'b', 3 => 'c');
$b = serialize($a);
var_dump($b); ////Returns this string(42) "a:3:{i:1;s:1:"a";i:2;s:1:"b";i:3;s:1:"c";}"
$c = unserialize($b);
print_r($c); //Return the same thing as $a

试试这段代码,你使用序列化将数组转换为字符串,然后你可以轻松地存储它。然后,反序列化以返回数组!

文档:http://php.net/manual/fr/function.serialize.php

Cookie 不适用于数组 - 它们只是本地计算机上的字符串。有

$res = serialize($arr);

您可以将数组转换为字符串。 (用 unserialize($arr) 转换回来。)

使用这个:

setcookie('cart_array',implode('|',$cart_array),time()+3600);

使用这个将 cookie 读回数组:

$cart_array = explode('|',$_COOKIE['cart_array'])

虽然我觉得没有必要这么做。但是,只是回答你的问题。

并且请注意Cookie的总长度What is the maximum size of a cookie

使用serialize()

setcookie('cart_array',serialize($cart_array),time()+3600);

$cart_array = unserialize($_COOKIE['cart_array']);

根据可能出现的特殊字符(不太可能,但如果你这样做的话最好知道)你可能还需要 urlencode():

setcookie('cart_array',urlencode(serialize($cart_array))),time()+3600);


$cart_array = unserialize(urldecone($_COOKIE['cart_array']));