如何使用PHP在cookie中存储大型JSON字符串

时间:2012-03-27 11:28:27

标签: php json setcookie

如何在cookie中存储大型JSON字符串?我只能使用cookie,在我的情况下,session不是一个选项。任何人都可以发布示例代码来压缩字符串并存储在cookie中并成功检索它。感谢。

3 个答案:

答案 0 :(得分:3)

压缩数据似乎不是一个好主意。相反,我将它保存在数据库中,只将数据库条目的ID存储在cookie中。这也可以防止人们篡改数据,尽管仍然可以篡改身份证。使用会话会更好,并消除这一点。

但是,如果您坚持将数据存储在Cookie中,则可以使用gzcompress()gzdeflate()gzencode() 压缩数据。这些都提供压缩。 gzdeflate()是您问题的最佳选择,因为它最节省空间。

$compressedJSON = gzdeflate($json, 9);
setcookie('json', $compressedJSON);

并阅读它

$compressedJSON = $_COOKIE['json'];
$json = gzinflate($compressedJSON);

请记住,即使压缩足以使您的数据保持在4K限制范围内,如果您需要存储的JSON数据量增加,最终也可能超过该限制。

我仍然建议你改用数据库。

答案 1 :(得分:0)

这样的东西?

编码

$sJSON = json_encode($sSomeJSONData);
setcookie('json', $sJSON);

解码

$sJSON = json_decode($_COOKIE['json']);

---编辑----

使用Kristian的答案,使用gzip或数据库,这是最有意义的...但如果你不能使用数据库,你可以手动建立会话。

从技术上讲,所有会话都是存储在包含数据的Web树之外的文本文件。您可以使用uniqid()之类的内容复制该过程,以生成“会话名称”。

在给定目录中创建一个文本文件,使用该“会话名称”作为文件名,并将“会话名称”存储在您的cookie中。

然后只需使用serialize()unserialize()file_put_contents()file_get_contents()在您的程序和文本文件之间传输数据,使用Cookie中的数据查找文本文件。

这需要一些健全性检查和劫持预防,但原则是合理的。

答案 2 :(得分:0)

如果您的信息很大,您可能需要考虑使用本地存储。并非所有浏览器都支持本地存储,但所有现代存储都支持。如果您的cookie太大,则存在获得431 http错误的风险。

因此,您没有尺寸问题,并且不必为每个请求传递大型Cookie,您只需在Cookie中存储唯一ID即可。然后,您可以使用唯一ID从memcache,mysql或任何其他服务器端存储中检索大型数据对象。无需任何会议。