在某些Web服务器中,带有逗号值的cookie将被拆分为两个cookie(一个值为空值)。例如,"foo=bar,goo"
将被视为"foo=bar;goo="
。根据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
答案 0 :(得分:5)
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
这些关键字是什么:cookie-pair,cookie-name,cookie-value,cookie-octet?
cookie-value
是=
的右侧部分。
cookie-octet
是实际值,用双引号括起来或什么都没有。参见:
key="value"
或
key=value
当您输入,
(或;
)时,请看看会发生什么:
key="value,",key2="value2"
或
key=value,,key2=value2
所以,你的假设不太正确,你不能在值中使用逗号或分号。
答案 1 :(得分:4)
答案 2 :(得分:2)
根据您引用的文件部分,不允许使用逗号:
US-ASCII characters excluding CTLs, whitespace DQUOTE, comma, semicolon, and backslash
但是,我相信所有现代浏览器都允许它,所以请冒风险使用它。 如果您需要对特殊字符进行编码并保持合规,则可以始终使用base64或类似的东西,具体取决于您的目标。