Cookie值是否应为URL编码?

And*_*eKR 10 cookies interop http

设置cookie时,PHP 会对cookie值进行url编码(至少在不使用时setrawcookie),并在将cookie值提供给应用程序之前对其进行url解码$_COOKIE.

这是一个公认的标准吗?如果我设置了原始cookie值a%3Db,我会回复a=b大多数Web编程语言(通过各自的cookie读取机制)吗?

And*_*eKR 11

sytech 的回答(我已经接受了)肯定是正确的,因为它引用了规范,但由于规范相当模糊,这里概述了一些 Web 框架如何实际处理这个问题:

RFC6265:           "for example Base64"
PHP:               URL encode
Go:                raw
Node.js + Express: URL encode
Run Code Online (Sandbox Code Playgroud)


syt*_*ech 5

是。尽管不是规范所必需的,但在RFC6265中提到了以下内容(重点在原始文档中,未添加)

为了最大化与用户代理的兼容性,希望以cookie值存储任意数据的服务器应该使用Base64 [RFC4648]对数据进行编码。

以我的经验,大多数cookie的Web框架和库都具有编码/解码cookie值的方法。在许多情况下,尤其是。在框架和高级语言中,这是抽象出来并自动完成的。

此答案相当详细地提供了cookie允许的值背后的历史记录。您可能会感兴趣。

  • 可悲的是,正如我最近通过很多头痛发现的那样,BASE64 包含字符“+”。并且似乎没有办法(不是通过 POST 或 GET 请求,也绝对不是通过 $_COOKIE 数组)在 PHP 中读取带有完整“+”字符的 cookie。由于 Base64 在以“安全”字符传输二进制数据方面非常普遍,因此在 Base 64 中包含 +(和“=”)似乎与浏览器开发存在重大脱节。幸运的是,还有许多其他字符可供选择,因此用其他字符来代替这少数情况并不困难。但它是一个皮塔饼。 (2认同)