cookies - 用于 cookie 的编码方案

标签 cookies browser unicode

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 字节字符 ( 1 , [0x31]) -- 4095 个字符
  • 2 字节字符 ( £ , [0xC2, 0xA3]) -- 2047 个字符
  • 3 字节字符 ( , [0xE7, 0x95, 0x80]) -- 1365 个字符
  • 4 字节字符 ( 𝆏 , [0xF0, 0x9D, 0x86, 0x8F]) -- 1023 个字符

  • Chrome 36.0.1985.143
  • 1 字节字符 ( 1 , [0x31]) -- 4094 个字符
  • 2 字节字符 ( £ , [0xC2, 0xA3]) -- 2047 个字符
  • 3 字节字符 ( , [0xE7, 0x95, 0x80]) -- 1364 个字符
  • 4 字节字符 ( 𝆏 , [0xF0, 0x9D, 0x86, 0x8F]) -- 1023 个字符

  • 歌剧 24.0.1558.17
  • 1 字节字符 ( 1 , [0x31]) -- 4094 个字符
  • 2 字节字符 ( £ , [0xC2, 0xA3]) -- 2047 个字符
  • 3 字节字符 ( , [0xE7, 0x95, 0x80]) -- 1364 个字符
  • 4 字节字符 ( 𝆏 , [0xF0, 0x9D, 0x86, 0x8F]) -- 1023 个字符

  • IE 8.0.6001.19518

    IE 也将 RFC 限制放宽到每个 cookie 5117 字节,但也强制每个域的最大 cookie 大小限制(在这种情况下,发现的限制是 10234 个字符)
  • 1 字节字符 ( 1 , [0x31]) -- 5115 个字符
  • 2 字节字符 ( £ , [0xC2, 0xA3]) -- 5115 个字符
  • 3 字节字符 ( , [0xE7, 0x95, 0x80]) -- 5115 个字符
  • 4 字节字符 ( 𝆏 , [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/

    相关文章:

    javascript - 使用 JavaScript 设置 cookie 并获取 cookie

    Javascript:如何模拟浏览器 cookie 的实现?

    javascript 在选项卡之间同步代码执行

    java - ä Java中的字母排序问题

    python - 使用 urllib 启用 cookie

    ios - 有没有办法阻止 iOS 上的 Safari 在关闭时清除网站的 cookie?

    javascript - 浏览器默认全局 $ 函数

    html - body.onload 是否等待 IFrame?

    python - 确认 Python 2.6 ftplib 不支持 Unicode 文件名?备择方案?

    Unicode 键盘集成 TinyMCE