使用 cookie 传递 URL 参数字符串

Using cookies to pass URL param string

本文关键字:参数 字符串 URL 传递 cookie 使用      更新时间:2023-09-26

我有一个 URL,它在查询参数的值中包含"!"。 我在 cookie 中对参数字符串进行编码并加载相关页面。 从 php:

foreach ( $_GET as $key => $value ){
    setcookie($key,$value,time()+60,'/');
}

在相关页面中,cookie 的值(通过 javascript/jquery $.cookie(")读取)的"!"编码为 %21。

有人可以告诉我为什么"!"被编码了吗? 它不是 cookie 值中的有效字符吗?

可以在

两个位置对数据进行编码。第一种是,当从$_GET数组中获取时,可以对$value进行编码,也可以使用 rawurldecode() 进行解码。编码可能发生的第二个地方是使用setcookie()时;为避免这种情况,请改用setrawcookie(),这将设置原始 Cookie 而不是编码的 Cookie。

foreach ( $_GET as $key => $value ){
    setrawcookie($key, rawurldecode($value), time() + 60, '/');
}

有人可以告诉我为什么"!"被编码了吗?它不是 cookie 值中的有效字符吗?

看到这个答案。根据 RFC 6265,! 是 cookie 名称和值中的有效字符。如果 php 编码!则意味着它是一个错误。

要解决此问题,您可以按照@Andrew的建议进行操作,或者使用一个名为 js-cookie 的库,该库允许使用转换器拦截 cookie 读取,然后您可以还原 PHP 在客户端中执行的编码。