Cookie值是否应为URL编码?

时间:2018-03-10 04:01:03

标签: http cookies interop

在设置Cookie时,PHP会对Cookie值进行网址编码(至少在不使用setrawcookie时)并对其进行网址解码,然后才能将其提供给{ {1}}。

这是一个公认的标准吗?如果我将原始cookie值设置为$_COOKIE,我会在大多数网络编程语言中(通过各自的cookie读取机制)返回a%3Db吗?

3 个答案:

答案 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格式,通常将名称和值分别编码,而等号则保持不变。

相关问题