逗号是cookie值中的有效字符

时间:2014-08-19 15:28:27

标签: http cookies

在某些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

RFC 6265

3 个答案:

答案 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)

不允许他们这样做。

来自specs

  

此字符串是一系列字符,不包括分号,逗号   和白色空间。

可以在RFC2965RFC2616

中查看相同内容

答案 2 :(得分:2)

根据您引用的文件部分,不允许使用逗号:

US-ASCII characters excluding CTLs, whitespace DQUOTE, comma, semicolon, and backslash

但是,我相信所有现代浏览器都允许它,所以请冒风险使用它。 如果您需要对特殊字符进行编码并保持合规,则可以始终使用base64或类似的东西,具体取决于您的目标。