Cookie 解析器

粘贴 Cookie 请求头、Set-Cookie 响应头或 cookies.txt,查看解码后的值,逐个判断浏览器会保存还是拒收及原因,推算下一次请求的 Cookie 头,并可复制脱敏版。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
“自动”识别头名、cookies.txt,以及 Path、Expires 等属性。自动判断与输入格式不符时,选择 Cookie 或 Set-Cookie 固定格式。
选项
在表格和复制的 JSON 中解码百分号编码的 UTF-8 值。无效转义和非 UTF-8 字节保持原样。原始头与脱敏副本保留原编码。
拆分用逗号合并的 Set-Cookie 值,包括 Headers.get 的输出,同时保留 Expires 日期里的逗号。关闭后按一条 Set-Cookie 检查。
Cookie 请求头选“对象”时,同名取第一个值;选“数组”时保留所有同名项。Set-Cookie 与 cookies.txt 始终导出数组。
默认隐藏所有值。“只隐藏会话 ID 与令牌”按名称和值的模式判断,分享前请检查结果。名称与 Set-Cookie 属性仍然可见。

粘贴 Cookie 请求头、Set-Cookie 行或 cookies.txt 内容。数据不会离开本页。

粘贴 Cookie 或 Set-Cookie 头、curl -i / -v 输出、复制为 cURL 的命令(-b 或 -H),或 cookies.txt。输入时实时解析。暂不支持 Cookie 编辑器导出的 JSON。内容不保存、不上传。
解析结果 Cookie 表格显示解码值、字节数、同名提示、常见名称说明和 JWT 链接。Set-Cookie 卡片说明每项会被保存、删除或拒收及原因。有效期从解析时刻计算。

脱敏副本仍保留 Cookie 名称和属性,分享前请检查。

    生成 Set-Cookie 响应头
    Set-Cookie 响应头 生成 Set-Cookie 头及 Domain、Path 相同的删除头,字段变化时实时更新。值含有不能直接出现的字符时,打开百分号编码。
      日后删除它用的响应头
      示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

      示例:Tomcat 的 JSESSIONID 为什么到了 /api 就没了

      一个部署在 /shop 下的 Java 应用,登录接口 https://www.example.cn/shop/login 返回了这两行:

      Set-Cookie: JSESSIONID=7F3A9C2E5B1D4F8A6C0E2B4D6F8A0C2E; Path=/shop; Secure; HttpOnly
      Set-Cookie: username=%E5%BC%A0%E4%B8%89; Path=/; Max-Age=2592000

      Tomcat 的 Context 配置文档 写明:没有配置 sessionCookiePath 时,会话 Cookie 的路径就是应用的上下文路径,所以这里是 Path=/shop。前端再去调用另一个应用 /api/cart 时,模拟结果是:

      Cookie: username=%E5%BC%A0%E4%B8%89

      JSESSIONID 因路径不匹配没有带上,后端自然认为用户未登录。username 的值解码后是“张三”,它没有 Secure、HttpOnly、SameSite,卡片里会逐条提示。

      Hm_lvt_8c5e2d1f0a9b4c7e6d3f2a1b0c9d8e7f=1759363200,1759449600; JSESSIONID=7F3A9C2E5B1D4F8A6C0E2B4D6F8A0C2E; username=%D5%C5%C8%FD; JSESSIONID=guest
      • Hm_lvt_ 是百度统计的 Cookie,记录访客历史访问时间,几个时间戳用逗号隔开。
      • JSESSIONID 出现两次。JSON 对象取第一个,与 Express、PHP 读到的一致。
      • username=%D5%C5%C8%FD 是按 GBK 编码的“张三”,不是 UTF-8,所以按原文显示并提示。按 UTF-8 编码时应为 %E5%BC%A0%E4%B8%89。
      • “复制脱敏版”选“只隐藏会话 ID 与令牌”时,两个 JSESSIONID 的值变成 [redacted],统计 Cookie 保留。

      浏览器怎样处理每个属性

      属性本工具采用的规则
      Expires按 RFC 6265bis §5.1.1 的 Cookie 日期算法读取。2026-10-21T07:28:00Z 这种 ISO 格式读不出来,Cookie 会变成会话 Cookie。
      Max-Age优先于 Expires;0 或负数表示删除;超过 400 天截到 400 天(Chrome 104 起)。
      Domain开头的点会被忽略。不写 Domain 只在当前主机生效,写了则所有子域名都能收到。Domain 是公共后缀列表里的后缀时拒收:从 https://www.example.com.cn/ 收到 sid=x; Domain=com.cn 会被拒收,Domain=github.io 这类列表私有部分的后缀也一样。Domain 恰好等于响应主机时,Cookie 按 host-only 处理(RFC 6265bis §5.7 第 9 步)。
      Path不写或不以 / 开头时,取响应 URL 所在的目录。
      SameSite不写时 Chrome 80+、Edge 86+ 按 Lax 处理,Firefox、Safari 不这样做(MDN 兼容性数据)。None 必须同时有 Secure。
      Partitioned必须有 Secure(CHIPS 草案);Chrome 114+、Firefox 141+、Safari 26.2+ 支持。
      名称前缀__Secure- 要求 Secure;__Host- 要求 Secure、Path=/、不带 Domain;__Http-、__Host-Http- 还要求 HttpOnly(Chrome 140+、Firefox 143+)。不区分大小写。
      大小名称加值超过 4096 字节(按 UTF-8 计)整条忽略;属性值超过 1024 字节,该属性忽略。一个汉字占 3 字节。

      实测:Chrome 与规范不一致的地方

      2026-10-02 我们用本地测试服务器把每一行发给 Chromium 152,再读出它实际保存的 Cookie。日期、大小、前缀、SameSite=None、Partitioned 都与 RFC 6265bis 一致,下面几处不同。本工具按 RFC 判断,遇到这些写法时另加说明:

      • Max-Age=+60:RFC 要求忽略,Chromium 按 60 秒处理。
      • 值中间有制表符:RFC 允许,Chromium 拒收。
      • Domain=.:RFC 视为空域名(host-only),Chromium 拒收。
      • 覆盖已有 Cookie 时,Chromium 给它记新的创建时间,所以它会排到之前设置的 Cookie 后面;RFC 要求沿用旧的创建时间。
      读取方同名 Cookie带双引号的值值里有空格
      Express 5 的 req.cookies(cookie-parser 1.4.7,cookie 0.7.2)取第一个去掉引号保留
      Python 3.12 http.cookies取最后一个去掉引号整个请求头都丢弃
      PHP 8.4 的 $_COOKIE取第一个保留引号保留

      PHP 还会把名称里的点和空格换成下划线。工具在对应的行里都会注明。

      2026-10-02 我们把同样的输入粘贴到 cn.bing.com 搜“cookie解析”排前面的 UU在线工具、Bing 英文结果第一的 ToolsForNerds 等五个工具里,它们都没有把内容发到服务器。UU在线工具把三行 Set-Cookie: 当成一个对象,键名是 Set-Cookie: promo、Domain、Expires;对 sid=new; theme=dark; sid=old 输出的 JSON 里 sid 是 old,不是 Express 和 PHP 实际读到的值,%E5%BC%A0%E4%B8%89 也没有解码。五个工具都没有指出 SameSite=None 缺 Secure、__Host- 带 Domain 会被拒收,也没有说明 Max-Age=0 是删除。

      限制

      • 公共后缀取自公共后缀列表的固定版本(2026-10-01,包含 ICANN 与私有两部分,以及通配与例外规则)。列表经常更新,之后新增的后缀工具不知道;浏览器也按各自的节奏更新内置的列表。列表压缩后约 45 KB,第一次解析 Set-Cookie 或 cookies.txt 时才加载。加载完成前或加载失败时,带 Domain 属性的 Cookie 标为「未核实」,不进入请求模拟,也不判断它的 Domain。
      • 模拟假设每行 Set-Cookie 都来自顶层页面的响应,并且之前没有任何 Cookie;不模拟 Chrome 对未写 SameSite 的新 Cookie 允许跨站 POST 的 2 分钟例外。
      • 有效期从粘贴的时刻起算,不是响应时刻。
      • 不读取浏览器插件导出的 JSON;请粘贴 Cookie 请求头或 cookies.txt。

      FAQ

      Cookie 请求头里为什么会有两个同名 Cookie?

      浏览器按“名称 + 域名 + 路径”区分 Cookie。用 Path=/ 设置的 JSESSIONID 和用 Path=/shop 设置的 JSESSIONID 是两个 Cookie,访问 /shop 下的页面时会一起发送,路径长的在前。服务端取哪个各不相同:Express 和 PHP 取第一个,Python 的 http.cookies 取最后一个。要清掉旧的那个,需要发一条 Domain、Path 与它完全相同、带 Max-Age=0 的 Set-Cookie。

      Set-Cookie 发了,浏览器里却看不到这个 Cookie,为什么?

      常见原因:SameSite=None 但没有 Secure;__Host- 前缀的 Cookie 带了 Domain 或 Path 不是 /;Domain 不包含响应所在的主机;在 http:// 页面设置带 Secure 的 Cookie;名称加值超过 4096 字节。把这行连同响应 URL 粘贴进来,对应卡片会显示“拒收”和原因。

      Expires 和 Max-Age 同时存在时以哪个为准?

      以 Max-Age 为准,Expires 会被忽略。Max-Age=0 或负数表示删除。浏览器会把超过 400 天的有效期截到 400 天。

      不写 SameSite 会怎样?

      Chrome 80 起、Edge 86 起按 SameSite=Lax 处理:用户从别的网站点链接进来时会带上,跨站 iframe、fetch 和表单 POST 不带。Firefox 和 Safari 仍会在跨站请求里发送。建议显式写上 SameSite,让各浏览器行为一致。

      粘贴的 Cookie 会被上传吗?

      不会。解析在浏览器里完成,页面不发送任何包含这些内容的请求,也不保存。Cookie 里常有会话 ID,所以本页不加载 Google Analytics 和 AdSense。需要贴到工单或群里时,用“复制脱敏版”把值换成 [redacted]。