Cookie字符串大小上限为4096字节(Chrome/Edge/Safari)或4097字节(Firefox),按UTF-8编码计算全部组成部分(键、值、等号、分号、空格及所有属性)的总字节数,中文等字符占多字节,超限将静默失败或报警告。

识别 Cookie 字符串的拼接大小上限,关键在于理解浏览器实际计算的是整个 Cookie 字符串的 UTF-8 字节数(不是字符数),且必须包含所有组成部分:键(name)、等号(=)、值(value)、以及所有属性(Domain、Path、Expires、Max-Age、Secure、HttpOnly、SameSite 等)拼接后的完整字符串。
Cookie 总长度 = name + "=" + value + "; " + 所有属性字符串
例如:
document.cookie = "token=abc123; Domain=example.com; Path=/api; Expires=Wed, 01 Jan 2026 00:00:00 GMT; Secure; HttpOnly; SameSite=Lax"
这个字符串中每一个字符都要按 UTF-8 编码转为字节参与计数。中文、emoji、特殊符号会占多个字节(如一个中文通常占 3 字节)。
4KB 是硬性上限,但各浏览器略有差异
-
Chrome / Edge / Safari:严格限制为 4096 字节(含 name、=、value 和全部属性);超限则静默失败,
document.cookie赋值无效,无报错、无提示 - Firefox:上限为 4097 字节;超限时会在控制台输出明确警告,如 "Cookie 'token' is too large to store."
- Opera:上限为 4096 字节
- 旧版 IE:上限为 4095 字节
实测验证方法
可通过 JS 动态构造并检测是否写入成功:
- 用
encodeURIComponent()编码 value(避免特殊字符破坏格式,但注意它会增加字节数) - 手动拼接完整 Cookie 字符串,再用
new TextEncoder().encode(str).length获取真实 UTF-8 字节数 - 设置后立即读取
document.cookie,检查目标键是否存在 —— 若不存在,大概率是超限或属性语法错误 - 在 Chrome/Firefox 的 DevTools → Application → Cookies 面板中,可直接看到每条 Cookie 的 “Size” 列(单位:字节),这是最可靠的参考值
容易被忽略的“隐形开销”
-
Domain 属性自带前导点:如
Domain=.example.com比Domain=example.com多 1 字节 -
Expires 时间格式固定且冗长:GMT 格式如
Expires=Mon, 01 Jan 2030 00:00:00 GMT占约 30 字节,远多于Max-Age=31536000(仅约 15 字节) -
SameSite 值区分大小写且带等号:如
SameSite=Strict是 15 字节,SameSite=Lax是 13 字节 -
空格和分号也算字节:每个
;(分号+空格)占 2 字节,属性间不能省略


















