2010-04-22 58 views
6

我試圖將嵌套數組存儲在cookie中。我決定將數組存儲爲JSON字符串。但是,我收到此警告:將嵌套數組存儲在cookie中

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

有推薦的方式來存儲嵌套數組在cookie中?

+0

出於好奇,爲什麼你需要將那麼多的數據存儲到cookie中? – 2010-04-22 16:22:06

+0

這裏有很多假設(從一些答案/反饋中判斷)......它是一個嵌套數組並不一定意味着很多數據。首先,最大嵌套深度可能<= 3。其次,我只存儲對象ID(整數)。 – morpheous 2010-04-22 20:40:56

回答

3

你可以使用base64_encode()base64_decode()

注意,根據手冊:

Base64編碼的數據大約需要33% 更多的空間比原來的數據。

+0

這似乎適用於我。 – morpheous 2010-04-22 21:06:09

+0

請記住,javascript base64解碼不完全是跨瀏覽器http://stackoverflow.com/questions/2820249/base64-encoding-and-decoding-in-client-side-javascript – 2013-09-23 12:49:39

1

我不認爲這是一個乾淨的方式做到這一點,但你可以urlencodejson_encode d字符串可以將其存儲在cookie中。

編輯:Tom Haigh的方式當然更清潔(使用base64_encode)。

+0

這是一種常見的方法。如果你想從其他地方讀取cookie,'rawurlencode'可能是更好的選擇,例如。 JavaScript的'decodeURIComponent'。 – bobince 2010-04-22 16:07:11

0
$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

2

如果您有可用的持久性(DB,會話內存緩存)的一些其他形式的,我建議你存儲的實際數據存在。然後在cookie中添加一個唯一的標識符,該標識符可用於查找所需的數據。它只是更清潔和更安全。

2

有沒有推薦的方法來存儲嵌套數組在cookie中?

是 - 不要。使用會話或其他句柄將它存儲在服務器端。不僅存在將數據存儲在cookie中的格式和範圍問題,還有文件大小限制。

C.