我知道还有其他问题,但他们的答案似乎是假设而不是确定的。
我有限的理解是cookie值是:
- 分号已用于分隔单个 cookie 中的 cookie 属性。
- 等号用于分隔 cookie 名称和值
- 冒号用于分隔标头中的多个 cookie。
还有其他“特殊”角色吗?
其他一些问答建议使用一个 base64 编码该值,但这当然可能包含等号,这当然是无效的。
我还看到一些建议,可以引用价值观,但这会导致其他问题。
- 特殊字符需要加引号吗?
- 带引号的值是否支持通常的反斜杠转义机制。
RFC
我读了一些 RFC,包括许多 cookie RFCS 中的一些,但我仍然不确定,因为存在对另一个 RFC 等的交叉引用,没有明确的简单解释或“回答”我的查询的示例。
希望没有人会说阅读 RFC,因为问题是哪个 RFC...?
我想我还读到不同的浏览器有稍微不同的规则,所以希望如果这很重要,请在您的答案中注意这一点。
最新的 RFC 是6265,并且它指出以前的 Cookie RFC 已过时。
RFC 中的语法规则如下:
cookie-pair = cookie-name "=" cookie-value
cookie-name = token
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )
cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
; US-ASCII characters excluding CTLs,
; whitespace DQUOTE, comma, semicolon,
; and backslash
Thus:
由此可见,可以使用base-64编码,因为equals并不特殊。
最后,据我所知,定义了 RFC 6265 cookie 值,以便它们可以与实现任何 Cookie RFC 的任何浏览器一起使用。但是,如果您尝试使用不符合 RFC 6265(但确实符合早期 RFC)的 cookie 值,您可能会发现 cookie 行为因浏览器的不同而异。
简而言之,只要符合 RFC 6265 的规定就可以了。
如果您需要传递包含任何禁止字符的 cookie 值,您的应用程序需要对这些值进行自己的编码和解码;例如使用base64。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)