为什么在将json写入cookie时使用encodeURIComponent()

时间:2011-04-21 10:54:35

标签: javascript json cookies encoding

特别是,将JSON保存到cookie时,只保存原始值是安全的吗?

我不想编码的原因是因为json具有较小的值和键但结构复杂,因此编码,替换所有“,:和{},大大增加了字符串长度

4 个答案:

答案 0 :(得分:2)

如果你的值包含“JSON字符”(例如逗号,引号,[]等),那么你应该使用encodeURIComponent,这样它们就会被转义,并且在读取值时不会破坏你的代码。

答案 1 :(得分:2)

您可以使用JSON.stringify()方法将JSON对象转换为字符串,然后将其保存在cookie中。

请注意,Cookie的字符数限制为4000。

如果您的Json字符串有效,则不需要对其进行编码。

e.g。

JSON.stringify({a:'foo"bar"',bar:69}); => '{"a":"foo\"bar\"","bar":69}'有效的json叮咬被转义。

答案 2 :(得分:1)

MDN

上记录得很清楚
  

为避免对服务器发出意外请求,您应该在任何用户输入的参数上调用 encodeURIComponent ,这些参数将作为URI的一部分传递。例如,用户可以为变量注释键入“Thyme& time = again”。在此变量上不使用 encodeURIComponent 将再次给出comment = Thyme%20& time =。请注意,&符号和等号表示新的键和值对。因此,不是让POST注释键等于“Thyme& time = again”,而是有两个POST键,一个等于“Thyme”,另一个(时间)等于。

答案 3 :(得分:0)

Cookie: name=value; name2=value2

空格是HTTP Cookie标头中cookie分离的一部分。因此,cookie值中的原始空格可能会使服务器混淆。