JSON Cookie 格式
Cookie 并没有统一的 JSON 格式。常见的有四种结构,它们能保存的信息量各不相同。下面是每一种的样子和它的能力边界。
各格式能保存什么
| 格式 | 域名 | 有效期 | 标志位 |
|---|---|---|---|
| Cookie-Editor 与 EditThisCookie | 是 | 是 | 是 |
| Puppeteer 与 Playwright | 是 | 是 | 是 |
| 键值对 | 否 | 否 | 否 |
| Cookie 请求头字符串 | 否 | 否 | 否 |
四种结构
Puppeteer 与 Playwright
page.setCookie() 和 context.addCookies() 接受的格式。有效期字段名为 expires,会话 Cookie 用 -1 表示。sameSite 采用 HTTP 写法:None、Lax 和 Strict。省略 sameSite 会让浏览器应用自己的默认值,因此当它是 unspecified 时我们不写这个字段。
使用场景 — Puppeteer、Playwright、各类 Selenium 封装
[
{
"name": "session_id",
"value": "8f14e45fceea167a5a36dedd4bea2543",
"domain": ".example.com",
"path": "/",
"expires": 1798761600,
"httpOnly": false,
"secure": true
},
{
"name": "auth_token",
"value": "eyJhbGciOiJIUzI1NiJ9.e30.ZRrHA1JJJW8opsbCGfG_HACGpVUMN_a9IV7pAx_Zmeo",
"domain": ".example.com",
"path": "/",
"expires": 1798761600,
"httpOnly": true,
"secure": true
},
{
"name": "theme",
"value": "dark",
"domain": "example.com",
"path": "/account",
"expires": 1798761600,
"httpOnly": false,
"secure": false
},
{
"name": "cart_preview",
"value": "tmp-4471",
"domain": ".example.com",
"path": "/",
"expires": -1,
"httpOnly": false,
"secure": false
}
]键值对
一个由名称到值的扁平对象,也就是传给 requests 会话或 axios 配置的东西。除此之外它什么都不保存 — 没有域名,没有有效期,没有标志位。
使用场景 — Python requests、axios、各类 fetch 封装
{
"session_id": "8f14e45fceea167a5a36dedd4bea2543",
"auth_token": "eyJhbGciOiJIUzI1NiJ9.e30.ZRrHA1JJJW8opsbCGfG_HACGpVUMN_a9IV7pAx_Zmeo",
"theme": "dark",
"cart_preview": "tmp-4471"
}Cookie 请求头字符串
严格来说不是 JSON,但属于同一个话题:Cookie 请求头的字面值。各键值对之间用分号加空格连接。这正是你粘贴到 curl -H 之后或 Postman 里的内容。
使用场景 — curl、Postman、HTTPie、浏览器开发者工具
session_id=8f14e45fceea167a5a36dedd4bea2543; auth_token=eyJhbGciOiJIUzI1NiJ9.e30.ZRrHA1JJJW8opsbCGfG_HACGpVUMN_a9IV7pAx_Zmeo; theme=dark; cart_preview=tmp-4471格式之间转换会丢失信息
从完整格式转成键值对或请求头是单向的:域名、路径、有效期和标志位无处存放。再转回来,得到的是会话 Cookie,域名取决于你填写的内容。当某次转换会丢数据时,转换器会给出提示。
在转换器中试试
转换器