【问题标题】:How do I store this JSON object as a cookie and than read it in vanilla javascript?如何将此 JSON 对象存储为 cookie,而不是在 vanilla javascript 中读取它?
【发布时间】:2011-03-16 05:00:48
【问题描述】:

我实际上可以像这样把它写成 cookie:

 ["4c3dd477c441e17957000002","4c2ac3cc68fe54616e00002e","4c3dd477c441e17957000003","4c3dd477c441e17957000004"]

但是如何读取 cookie?

我正在使用 node.js/express.js(和咖啡脚本),当我读取 cookie 键时,我得到的值只是上述数组的第一个值。

我需要以某种方式解析它吗?还是更复杂的序列化/反序列化?

谢谢

【问题讨论】:

  • 您确定 cookie 存储正确吗? document.cookie 的值是多少?

标签: javascript json cookies node.js


【解决方案1】:

Cookie 以逗号分隔,因此当您存储 JSON 时,它会被分解为多个 Cookie。在写入 Cookie 之前,您需要以某种方式对 JSON 字符串进行编码,然后在读取时进行解码。

例如,您可以将 JSON 字符串替换为 '","' 部分,如下所示:

// encode
mycookie = json.replace(/","/g, '"-"');

// decode
json = mycookie.replace(/"-"/g, '","');

显然这不是一个通用的解决方案,因为您需要确保被替换的字符串不会出现在内容中(甚至转义)

【讨论】:

  • 谢谢!我实际上不得不这样做 mycookie = json.replace(/","/g, '"-"') 但它的作用就像一个魅力。
  • 这并不理想,因为您仍然必须想出某种字符串来替换逗号,并希望该字符串不会出现在存储的值中。相反,一个不错的解决方案是使用 encodeURIComponent() 和 decodeURIComponent() 来对逗号和其他麻烦的字符进行编码和解码。
【解决方案2】:

我认为你可以这样编码:

// encode
mycookie = json.replace(/","/g, '"%2C"');

而且解码不需要修改

【讨论】:

  • 那里有一个小错字...应该是“%2C”而不是“2%C”。您还需要稍后对其进行解码......但是如果原始字符串恰好包含字符“%2C”或其他看起来像十六进制代码的字符串怎么办?更正确的解决方案是 encodeURIComponent() 和 decodeURIComponent() (在我对此处发布的其他解决方案的其他评论中也提到过)。
猜你喜欢
  • 2023-03-24
  • 2016-08-10
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2011-09-30
  • 2023-03-31
相关资源
最近更新 更多