【问题标题】:How to pass json encode into cookie in PHP如何在PHP中将json编码传递给cookie
【发布时间】:2021-12-19 09:41:04
【问题描述】:

当我使用 print_r 检查 JSON 编码时,它看起来很好 => {"expiry":1636191448,"auth":true}

然后我尝试将它存储在 cookie 中, 但是当我在浏览器cookie值中看到它时,它变成了这样=> %7B%22expiry%22%3A1636191866%2C%22auth%22%3Atrue%7D

谁能告诉我如何解决它。我不将此用于权限系统,但用于其他内容,例如在 javascript 中读取它,但尝试解析时出错

Uncaught SyntaxError: 位置 0 处 JSON 中的意外标记 % 在 JSON.parse() 处

.

这是我的 php 文件中的代码行

if (Cookie::exists(Config::get('client/cookie_name'))) {
    $client = json_decode(Cookie::get(Config::get('client/cookie_name')), true);
    $expiry = $client['expiry'];
} else {
    $client = array (
        'expiry' => time() + Config::get('client/cookie_expiry')
    );
}

$client['auth'] = true;

$client = json_encode($client);
Cookie::update(Config::get('client/cookie_name'), $client, $expiry);

【问题讨论】:

  • 请贴出相关代码。您究竟如何将 JSON 数据存储为 cookie?第二个字符串是 url 编码格式的 JSON 字符串,顺便说一句。

标签: javascript php json cookies


【解决方案1】:

Cookie 通常采用 URL 编码(但有时会使用不同的编码)。由于这不是真正标准化的,并且按照规范,只有少数字符必须以某种方式进行编码(未指定如何编码),不同的系统在处理 cookie 编码时可能采用不同的路线,因此读取 cookie由一个系统使用另一个系统设置可能会导致此类问题。

在您的情况下,您可以先调用 decodeURIComponent 的值:

const json = decodeURIComponent(encodedCookieValue)
const data = JSON.parse(json) 

延伸阅读:Should cookie values be URL encoded?

【讨论】:

  • (顺便说一下,因为经常使用这种类型的编码,所以 devtools 也可以让您显示解码后的值 - 只需勾选屏幕截图中可见的“显示 URL 解码”框即可。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多