RFC 6265 Sec 6.1指定允许每个 cookie 至少 4096 字节。
现在为了知道的数量字符 每个 cookie 允许,我需要知道用于 cookie 的字符编码,因为 RFC 指定了每个 cookie 的最大大小 字节 而不是 字符 .
我如何知道用于存储 cookie 的编码?
它是由用于创建 cookie 的编程语言(例如 PHP、JavaScript)所使用的字符编码决定的,还是由存储 cookie 的浏览器所使用的字符编码决定的?
更新:
我进行了一些测试,FF、Chrome 和 Opera 似乎都在使用 UTF-8 来存储 cookie,而且编码很明显 影响 的数量字符 你可以存储在 cookie 中。 cookie 中允许的最大字符数将受到用于在客户端上存储 cookie 的字符编码的影响。
怀疑浏览器使用 UTF-8 作为 cookie 的字符编码,我使用了测试 here具有单字节 UTF-8 字符 ( 1
)、两字节 UTF-8 字符 ( £
)、3 字节 UTF-8 字符 ( 畀
) 和 4 字节 UTF-8字符( 𝆏
)。我已经粘贴了下面获得的结果。
每个 cookie 集都使用一个单字节的 cookie 名称,提到的字符数 不包括 cookie 名称的单字节字符和字符 =
用于分隔 cookie 名称和 cookie 值。 []
中的值每个 Unicode 字符旁边的表示其在 UTF-8 中的十六进制表示。
FF 31.0
Firefox 将 RFC 限制放宽了一个字节,并将每个 cookie 的限制设置为 4097 个字节。
1
, [0x31]) -- 4095 个字符 £
, [0xC2, 0xA3]) -- 2047 个字符 畀
, [0xE7, 0x95, 0x80]) -- 1365 个字符 𝆏
, [0xF0, 0x9D, 0x86, 0x8F]) -- 1023 个字符 Chrome 36.0.1985.143
1
, [0x31]) -- 4094 个字符 £
, [0xC2, 0xA3]) -- 2047 个字符 畀
, [0xE7, 0x95, 0x80]) -- 1364 个字符 𝆏
, [0xF0, 0x9D, 0x86, 0x8F]) -- 1023 个字符 歌剧 24.0.1558.17
1
, [0x31]) -- 4094 个字符 £
, [0xC2, 0xA3]) -- 2047 个字符 畀
, [0xE7, 0x95, 0x80]) -- 1364 个字符 𝆏
, [0xF0, 0x9D, 0x86, 0x8F]) -- 1023 个字符 IE 8.0.6001.19518
IE 也将 RFC 限制放宽到每个 cookie 5117 字节,但也强制每个域的最大 cookie 大小限制(在这种情况下,发现的限制是 10234 个字符)
1
, [0x31]) -- 5115 个字符 £
, [0xC2, 0xA3]) -- 5115 个字符 畀
, [0xE7, 0x95, 0x80]) -- 5115 个字符 𝆏
, [0xF0, 0x9D, 0x86, 0x8F]) -- 2557 个字符 IE注意事项:
IE 似乎在使用 ECMAScript 的字符概念。 ECMAScript 将字符公开为 16 位无符号整数(字符编码可以是 UTF-16 或 UCS-2,并留作实现选择)。为测试选择的 4 字节字符使用两个 UTF-16 格式的 16 位代码单元。由于 ECMAScript 将一个 16 位整数作为字符,
"𝆏".length === 2
返回 true
.这导致
𝆏
算作两个字符。
最佳答案
似乎它更多地由程序员(在浏览器后面)决定,而不是由编程语言决定。通常 cookie 值是 URL 编码的,但没有要求。
看看this answer完成您的研究(添加 Safari 特例)。 This one也可能有帮助。
关于cookies - 用于 cookie 的编码方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25665703/