我知道还有其他问题,但他们的答案似乎是假设而非确定的。
我有限的理解是 cookie 值是:
- 已经使用分号分隔单个 cookie 中的 cookie 属性。
- 等号用于分隔 cookie 名称和值
- 冒号用于分隔 header 中的多个 cookie。
还有其他“特殊”字符吗?
其他一些 q/a 建议一个 base64 对值进行编码,但这当然可能包含等号,这当然是无效的。
我也看到一些建议,可能会引用值,但会导致其他问题。
- 特殊字符需要加引号吗?
- 引用的值是否支持通常的反斜杠转义机制。
征求意见稿 我阅读了一些 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
因此:
特殊字符是空白字符、双引号、逗号、分号和反斜杠。等于不是特殊字符。
除了可以用双引号括住值外,根本不能使用特殊字符。
不能引用特殊字符。
反斜杠不作为转义符。
由此可见可以使用base-64编码,因为equals并不特殊。
最后,据我所知,RFC 6265 cookie 值的定义使得它们可以与实现任何 Cookie RFC 的任何浏览器一起使用。但是,如果您尝试使用不符合 RFC 6265 的 cookie 值(但可以说确实符合早期的 RFC),您可能会发现 cookie 行为因浏览器而异。
简而言之,符合 RFC 6265 的规定,你应该没问题。
如果您需要传递包含任何禁止字符的 cookie 值,您的应用程序需要对这些值进行自己的编码和解码;例如使用 base64。
关于java - 有效 Cookie 值的明确指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108207/