在设置Cookie时,PHP会对Cookie值进行网址编码(至少在不使用setrawcookie
时)并对其进行网址解码,然后才能将其提供给{ {1}}。
这是一个公认的标准吗?如果我将原始cookie值设置为$_COOKIE
,我会在大多数网络编程语言中(通过各自的cookie读取机制)返回a%3Db
吗?
答案 0 :(得分:4)
是。虽然根据规范不是 required ,但source中提到了以下内容(重点在于原始文档,未添加)
最大化与用户代理,希望的服务器的兼容性 将任意数据存储在cookie值中应该对该数据进行编码 例如,使用Base64 [RFC4648]。
根据我的经验,大多数用于cookie的Web框架和库都有编码/解码cookie值的方法。在许多情况下,尤其是在框架和高级语言中,这是抽象的并自动完成。
RFC6265提供了相当详细的Cookie中允许的值背后的历史记录。你可能会感兴趣。
答案 1 :(得分:4)
sytech的答案(我已接受)肯定是正确的,因为它引用了规范,但由于规范相当含糊,这里概述了一些Web框架如何实际处理此问题:
RFC6265: "for example Base64"
PHP: URL encode
Go: raw
Node.js + Express: URL encode
答案 2 :(得分:2)
从NCZOnline被盗:
关于cookie值的编码有些混乱。通常认为,cookie值必须经过URL编码,但这是一个谬误,即使它实际上是实现。原始规范指出,仅必须编码三种类型的字符:分号,逗号和空格。该规范指出可以使用URL编码,但是并不需要它。 RFC完全没有提及编码。尽管如此,几乎所有的实现都对cookie值执行某种URL编码。对于name = value格式,通常将名称和值分别编码,而等号则保持不变。