将嵌套数组存储在cookie中

将嵌套数组存储在cookie中

问题描述:

我试图将嵌套数组存储在cookie中。我决定将数组存储为JSON字符串。但是,我收到此警告:将嵌套数组存储在cookie中

PHP警告:Cookie值不能包含以下任何',;; \ t \ r \ n \ 013 \ 014'在foobar.php

有推荐的方式来存储嵌套数组在cookie中?

+0

出于好奇,为什么你需要将那么多的数据存储到cookie中? – 2010-04-22 16:22:06

+0

这里有很多假设(从一些答案/反馈中判断)......它是一个嵌套数组并不一定意味着很多数据。首先,最大嵌套深度可能 morpheous 2010-04-22 20:40:56

你可以使用base64_encode()base64_decode()

注意,根据手册:

Base64编码的数据大约需要33% 更多的空间比原来的数据。

+0

这似乎适用于我。 – morpheous 2010-04-22 21:06:09

+0

请记住,javascript base64解码不完全是跨浏览器http://*.com/questions/2820249/base64-encoding-and-decoding-in-client-side-javascript – 2013-09-23 12:49:39

我不认为这是一个干净的方式做到这一点,但你可以urlencodejson_encode d字符串可以将其存储在cookie中。

编辑:Tom Haigh的方式当然更清洁(使用base64_encode)。

+0

这是一种常见的方法。如果你想从其他地方读取cookie,'rawurlencode'可能是更好的选择,例如。 JavaScript的'decodeURIComponent'。 – bobince 2010-04-22 16:07:11

$array = array(); 
$array[] = array(1,2,3); 
$array[] = array('a','b','c'); 
setcookie("test",serialize($array)); 

只是序列化,工作得很好。

你得到的是在您的Cookie:

'test' => string 'a:2:{i:0;a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}i:1;a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}}' (length=86) 
+3

这样做的危险是,您然后反序列化用户提交的数据,这是潜在的危险,因为通过传递不同的字符串,人们可以实例化任意对象等。 – 2010-04-22 16:02:46

+0

完全同意这一点。不是很安全,只取决于你在那个cookie中存储什么样的数据。 如果明智,您可以使用私钥对其进行混淆/加密。 – Mikushi 2010-04-22 16:05:29

+1

另外,似乎确实有负载分号,这肯定会导致'Set-Cookie'失败? “ – bobince 2010-04-22 16:05:55

如果您有可用的持久性(DB,会话内存缓存)的一些其他形式的,我建议你存储的实际数据存在。然后在cookie中添加一个唯一的标识符,该标识符可用于查找所需的数据。它只是更清洁和更安全。

有没有推荐的方法来存储嵌套数组在cookie中?

是 - 不要。使用会话或其他句柄将它存储在服务器端。不仅存在将数据存储在cookie中的格式和范围问题,还有文件大小限制。

C.