【发布时间】:2021-10-27 09:41:21
【问题描述】:
我需要将 json 字符串保存到 cookie 中。但字符串始终是 url 编码的。
cookie 是通过 javascript 读取的,必须以非 url 编码的 json 字符串形式接收,我无法编辑任何 js 部分。
$cs_f11 = [
'f11_a1_p117'=>'some data',
'f11_a2_p118'=>'some data',
'f11_a3_p119'=>'some data'
];
setcookie('cs_f11', json_encode($cs_f11), time()+86400, '/');
如果我使用 setrawcookie(),我会收到如下错误:
Cookie 值不能包含以下任何 ',; \t\r\n\013\014' in […]
javascript 也将 json 写入 cookie,但所有逗号都很好。
有没有办法将 json 字符串写入非 PHP 编码的 cookie 中?
【问题讨论】:
-
如果您的值可以包含换行符之类的内容,那么它必须进行编码 - 否则您将违反基本的 HTTP“语法”(标头以换行符结尾。)
-
@CBroe 这些值只是简单的单词和数字,例如“yes”或“12.4”
-
但是 JSON 编码仍然添加了
setrawcookie不会放过的字符。但我想您可以自己创建 wholeSet-Cookie: ...标头字符串,然后使用header将其发送给客户端。 -
正如 CBroe 和per spec 所说,cookie 值是“US-ASCII 字符不包括 CTL、空格 DQUOTE、逗号、分号、和反斜杠”。 JSON 大量使用逗号,因此没有真正的方法可以传递任何复杂的 JSON不以某种方式对其进行编码,无论是 URL、BaseXY 还是其他方式。
标签: javascript php json cookies