piapia123
zh

Cookie 格式化

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

⚠️ 它不联网:Cookie 要你自己取(开发者工具的 Application → Cookies,或 `curl -I` 返回的 `Set-Cookie` 行)。⚠️ 另外提醒一句:别把带有真实登录态的 Cookie 粘进任何在线工具 —— 那等于把会话交出去。这个工具完全在本地跑,但习惯要养对。 把 `Cookie` 或 `Set-Cookie` 那一行拆成看得清的表 —— 从浏览器开发者工具里复制出来直接粘就行。 ⚠️ 这两种头长得像但意思完全不同。请求头里的 `Cookie` 是一张扁平的名值表: ``` a=1; b=2; session=abc ``` 那是三个 cookie。而响应头里的 `Set-Cookie` 每一行只描述一个 cookie,分号后面是它的属性: ``` session=abc; Path=/; HttpOnly; Secure ``` 同样的 `a=1; b=2` 放在这里,就是「名为 a 的 cookie,带一个叫 b 的属性」。判断错了输出会完全不同,而且两种错法都不会报错 —— 所以这里会自动识别,判断得不满意也可以手动指定。 识别规则是「有没有出现已知的 cookie 属性名(Path / Domain / Expires / Max-Age / Secure / HttpOnly / SameSite)」,不是「第一个分号之后还有没有内容」—— 后者会把 `a=1; b=2` 这种极常见的请求头当成 Set-Cookie。 顺带把值里的 `%20` 这类编码解开,并把每个 cookie 缺哪个安全属性点出来:没有 `HttpOnly` 意味着页面上的脚本能读到它(一次 XSS 就能偷走会话),没有 `Secure` 意味着明文 HTTP 下也会发出去,没有 `SameSite` 意味着跨站请求会带上它(CSRF 的温床)。

功能

  • 请求头 `Cookie` 与响应头 `Set-Cookie` 都能解析,自动判断并有手动覆盖
  • `Set-Cookie` 的属性拆成旁注,不会混进「值」里被一起复制走
  • `Expires` 与 `Max-Age` 换算成具体时间,已过期的明确标出
  • 提示每个 cookie 缺了 `HttpOnly` / `Secure` / `SameSite` 中的哪一个
  • ⚠️ 认 `Partitioned`(CHIPS)—— 并且缺 `Secure` 时单独警告:那个组合会被浏览器直接拒绝,与「少了 HttpOnly」那种「能跑但更弱」不是一回事
  • 可选解开值里的百分号编码
  • 被引号包起来的值里的分号不会被当成分隔符
  • 全部在本机解析,cookie 不会离开这台设备

使用方法

  1. 把 `Cookie` 或 `Set-Cookie` 那一行粘进左侧(多行也可以)
  2. 判断得不对时手动指定解析方式
  3. 结果立刻出现,每一行都能单独复制

常见问题

为什么我的 `a=1; b=2` 被解成了两个 cookie?
因为在 `Cookie` 请求头里它确实就是两个 cookie —— 请求头用分号分隔多个独立的名值对,这是最常见的形态。 只有在 `Set-Cookie` 响应头里,分号后面的东西才表示属性。两者的区分靠「有没有出现已知的属性名」:`a=1; b=2` 里没有 `Path`、`HttpOnly` 这类名字,所以按请求头解。加了属性就变了 —— `a=1; b=2; Secure` 会被解成一个叫 `a` 的 cookie,`b=2` 是它的一个属性。 如果自动判断不合你的用途,把「解析方式」改成手动指定就好。
「没有 HttpOnly」这条提示有多要紧?
对会话 cookie 来说非常要紧。`HttpOnly` 的作用是让这个 cookie 对 JavaScript 不可见 —— 页面上一旦有 XSS(哪怕只是某个第三方脚本被投毒),没有 `HttpOnly` 的 cookie 就能被 `document.cookie` 直接读走并发到攻击者的服务器上,攻击者拿到会话就等于拿到了这个账号。 `Secure` 与 `SameSite` 同理但场景不同:`Secure` 防的是明文传输被中间人截获,`SameSite` 防的是跨站请求自动带上 cookie(也就是 CSRF)。三个都设上几乎总是对的。
`Max-Age` 和 `Expires` 有什么区别?
`Max-Age` 是「从现在起多少秒」,`Expires` 是一个绝对时间点。两者都存在时 `Max-Age` 优先(RFC 6265 的规定)—— 因为绝对时间会受客户端时钟不准、时区设置错误的影响,而相对秒数不会。 另外两个常见情况:值为 0 或负数表示立即删除这个 cookie(登出时就是这么做的);两个都不设置则是会话 cookie,浏览器关掉就没了 —— 这也是为什么有些站点关掉浏览器就得重新登录。

相关工具