【问题标题】:setcookie can't store jsonsetcookie 无法存储 json
【发布时间】: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 不会放过的字符。但我想您可以自己创建 whole Set-Cookie: ... 标头字符串,然后使用 header 将其发送给客户端。
  • 正如 CBroe 和per spec 所说,cookie 值是“US-ASCII 字符不包括 CTL、空格 DQUOTE、逗号、分号、和反斜杠”。 JSON 大量使用逗号,因此没有真正的方法可以传递任何复杂的 JSON以某种方式对其进行编码,无论是 URL、BaseXY 还是其他方式。

标签: javascript php json cookies


【解决方案1】:

借助 header(),as suggested 让它工作。

header ('Set-Cookie: cs_f1=' . json_encode($cs_f1) . '; expires=0; path=/;', false);

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2020-01-16
    • 2018-10-16
    相关资源
    最近更新 更多