JSON-форматы кук
Единого JSON-формата для кук не существует. В ходу четыре разных структуры, и они хранят разный объём информации. Вот как выглядит каждая и что она умеет.
Что какой формат умеет хранить
| Формат | Домен | Срок жизни | Флаги |
|---|---|---|---|
| Cookie-Editor и EditThisCookie | Да | Да | Да |
| Puppeteer и Playwright | Да | Да | Да |
| Словарь key-value | Нет | Нет | Нет |
| Строка заголовка Cookie | Нет | Нет | Нет |
Четыре структуры
Puppeteer и Playwright
То, что принимают page.setCookie() и context.addCookies(). Срок жизни называется expires, для сессионных кук используется -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
}
]Словарь key-value
Плоский объект «имя — значение». Именно его передают в сессию 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, DevTools браузера
session_id=8f14e45fceea167a5a36dedd4bea2543; auth_token=eyJhbGciOiJIUzI1NiJ9.e30.ZRrHA1JJJW8opsbCGfG_HACGpVUMN_a9IV7pAx_Zmeo; theme=dark; cart_preview=tmp-4471Конвертация между ними теряет информацию
Переход из полного формата в key-value или строку заголовка — дорога в одну сторону: домену, пути, сроку жизни и флагам негде сохраниться. Обратная конвертация даст сессионные куки с тем доменом, который вы укажете. Конвертер предупреждает, когда преобразование приведёт к потере данных.
Попробовать в конвертере
Конвертер