如何在cookie中存储大型JSON字符串?我只能使用cookie,在我的情况下,session不是一个选项。任何人都可以发布示例代码来压缩字符串并存储在cookie中并成功检索它。感谢。
答案 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或任何其他服务器端存储中检索大型数据对象。无需任何会议。