Mar*_*yan 104
要将数组值存储在cookie中,首先需要将它们转换为字符串,因此这里有一些选项.
存储代码
setcookie('your_cookie_name', json_encode($info), time()+3600);
Run Code Online (Sandbox Code Playgroud)
阅读代码
$data = json_decode($_COOKIE['your_cookie_name'], true);
Run Code Online (Sandbox Code Playgroud)
如果您需要使用JavaScript在前端读取cookie,JSON也可以很好地选择.
实际上你可以使用任何encrypt_array_to_string
/ decrypt_array_from_string
methods组将数组转换为字符串并将字符串转换回相同的数组.例如,您也可以使用explode
/ implode
作为整数数组.
来自PHP.net
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);
Run Code Online (Sandbox Code Playgroud)
如果您打印$_COOKIE
变量,您将看到以下内容
echo '<pre>';
print_r( $_COOKIE );
die();
Run Code Online (Sandbox Code Playgroud)
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.
Nar*_*adu 71
序列化数据:
setcookie('cookie', serialize($info), time()+3600);
Run Code Online (Sandbox Code Playgroud)
然后反序列化数据:
$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);
Run Code Online (Sandbox Code Playgroud)
在数据之后,$ info和$ data将具有相同的内容.
Nat*_*han 15
在cookie上使用序列化和反序列化是一种安全风险.用户(或攻击者)可以更改cookie数据,然后当您反序列化它时,它可以在您的服务器上运行PHP代码.Cookie数据不应该被信任.请改用JSON!
来自PHPs网站......
不要将不受信任的用户输入传递给unserialize().由于对象实例化和自动加载,反序列化可能导致代码被加载和执行,恶意用户可能能够利用它.如果需要将序列化数据传递给用户,请使用安全的标准数据交换格式,如JSON(通过json_decode()和json_encode()).
试试serialize()
.它将数组转换为字符串格式,然后您可以使用unserialize()
它将其转换回数组.像WordPress这样的脚本使用它来将多个值保存到单个数据库字段中.
你也可以json_encode()
像Rob说的那样使用,如果你想在javascript中读取cookie,这可能很有用.