在 Cookie 中存储 PHP 数组

2022-08-30 08:47:38

如何在 Cookie 中存储数组的正确方法?在 PHP 代码示例中:

$number_ticket=2;
$info[7][5]=1;
$info[8][5]=1;

答案 1

要将数组值存储在cookie中,首先需要将它们转换为字符串,因此这里有一些选项。

将 Cookie 存储为 JSON

存储代码

setcookie('your_cookie_name', json_encode($info), time()+3600);

读取代码

$data = json_decode($_COOKIE['your_cookie_name'], true);

JSON也可以是很好的选择,如果你需要在前端使用JavaScript读取cookie。

实际上,您可以使用任何/方法组,它将数组转换为字符串并将字符串转换回相同的数组。例如,您也可以将 / 用于整数数组。encrypt_array_to_stringdecrypt_array_from_stringexplodeimplode

警告:不要使用序列化/反序列化

从 PHP.net

enter image description here

Do not pass untrusted user input to unserialize().- 任何通过HTTP(包括cookie)来的东西都是不可信的!

与安全性相关的参考

作为替代解决方案,您也可以在不将数组转换为字符串的情况下执行此操作。

setcookie('my_array[0]', 'value1' , time()+3600);
setcookie('my_array[1]', 'value2' , time()+3600);
setcookie('my_array[2]', 'value3' , time()+3600);

之后,如果您要打印变量,您将看到以下内容$_COOKIE

echo '<pre>';
print_r( $_COOKIE );
die();
Array
(   
    [my_array] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

)

这是有文档记录的 PHP 功能。

从 PHP.net

Cookies names can be set as array names and will be available to your PHP scripts as arrays but separate cookies are stored on the user's system.


答案 2

序列化数据:

setcookie('cookie', serialize($info), time()+3600);

然后取消序列化数据:

$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);

数据后,$info和$data将具有相同的内容。