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