Что такое Cookies, как они работают, на что влияют и почему их стоит учитывать… Или не стоит?

Куки главная SEO

HTTP cookies — это один из столпов веб-технологии, без которого невозможно представить работу современного интернета. Однако большинство разработчиков относятся к cookies как к «чёрному ящику»: запускают, что-то работает, и хорошо. На самом деле, понимание нюансов cookies критично для безопасности, приватности и функциональности приложения.

Зачем вообще нужны cookies?

HTTP — это stateless протокол. Сервер обрабатывает каждый запрос независимо друг от друга и не помнит, были ли ранее от этого пользователя другие запросы. Можно представить ваш браузер как человека без памяти: каждый раз он приходит на сайт как первый раз.

Браузер без памяти vs с cookies

Cookies, как раз и решают эту проблему: они добавляют «памяти» браузеру. Сервер отправляет маленький файл (cookie) с информацией, и браузер автоматически отправляет его обратно с каждым следующим запросом.

Как работают cookies в HTTP

Давайте разберемся, как же происходит обмен информацией между браузером на вашем локальном компьютере и сайтом, на который вы через этот браузер зашли.

После того, как вы зашли на сайт, сервер отправляет cookie в HTTP-ответе, примерно такого вида:

Обмен cookie между браузером и сервером
 
http-response.txt
HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123xyz; Path=/; HttpOnly; Secure; SameSite=Lax
Set-Cookie: theme=dark; Path=/; Max-Age=31536000
Content-Type: text/html

Браузер читает этот заголовок и сохраняет два cookie:

1. sessionId — временный или сессионные cookie (удаляется при закрытии браузера)

2. `theme` — постоянный или персистентные cookie

При следующих запросах к этому сайту браузер уже автоматически добавляет сохраненные cookies:

 
http-request.txt
GET /profile HTTP/1.1
Host: example.com
Cookie: sessionId=abc123xyz; theme=dark

 

Это происходит автоматически. Разработчик не пишет `document.cookie` в каждом запросе — браузер следит за этим самостоятельно.

⚙️

Важно помнить, что размер одного текстового файла жестко ограничен спецификацией до 4096 байт. Превышение лимита ведет к усечению данных. В среде выполнения JavaScript для синхронного взаимодействия с локальной базой состояний используется объект document.cookie. Инженеры по автоматизации часто применяют этот интерфейс для инъекции токенов обхода капчи непосредственно перед инициализацией алгоритма сбора данных.

 

 

Типы Cookies

Маленький файлик, размером в несколько килобайт имеет несколько видов.

По времени жизни: Session vs Persistent

Короткоживущая и долговечная cookie

Session Cookies

Cookies без явно указанного срока действия или возраста становятся временными и удаляются при закрытии последней вкладки сайта.

Хранятся такие cookies в памяти браузера (RAM) и в какой то степени они тоже нагружают вашу систему.

 
session-cookie.http
Set-Cookie: sessionId=xyz; Path=/; HttpOnly

Что же хранится в этих куках:

  • Сессионные токены (логины, аутентификация)
  • Данные, которые не должны пережить закрытие браузера
  • Временные данные (содержимое корзины, черновики форм)

Persistent Cookies

Cookies с атрибутом `Expires` (срок удаления) или `Max-Age` (количество секунд).

Удаляются эти куки в указанную дату. Хранятся на жестком диске (в папке профиля браузера).

 
persistent-cookie.http
Set-Cookie: theme=dark; Path=/; Max-Age=31536000
Set-Cookie: rememberedUser=john; Expires=Fri, 06 Feb 2026 14:30:00 GMT

Что содержится в этих куках:

  • Предпочтения (тема, язык, размер шрифта)
  • Токены от разных сайтов
  • Аналитические идентификаторы
  • Долгосрочные настройки пользователя

Chrome начиная с версии M104 ограничивает максимум до 400 дней. Раньше можно было выставить cookie на 1000 лет — теперь нет.

По кому их устанавливаются: First-party vs Third-party

Свой сайт и чужие встраиваемые скрипты

First-party Cookies

Если куки устанавливает тот же домен, на котором находится пользователь — это First-party cookies. К примеру — вы на `example.com`, сервер `example.com` ставит cookie. Это first-party.

Отправляется:

  • При запросах к `example.com` из браузера (напрямую)
  • При запросах с других сайтов? Смотрите SameSite (на это влияет!)
 
first-party.http
Set-Cookie: sessionId=...; Domain=example.com
Set-Cookie: theme=dark; Domain=example.com

Third-party Cookies

Когда другой домен устанавливает куки, но через embed на вашей странице.

 
index.html
<!-- На сайте example.com -->
<img src="https://analytics.com/track?id=user123" />
<script src="https://ads.network/banner.js"></script>

То есть всякие сервисы аналитики, скрипты с других сайтов — это все third-party cookies.

И вот тут уже есть интересный момент — один cookie из Гугл Аналитики может отследить вас на 100 разных сайтах, где встроен их скрипт.

 

🔑

Cookies vs Authentication Tokens

В отличие от cookies, которые автоматически управляются обозревателем на основе правил маршрутизации, Authentication Tokens (JWT) игнорируют встроенные механизмы браузера. Выданный сервером токен сохраняется в LocalStorage и внедряется скриптами в заголовок Authorization при каждом обращении к API. При автоматизации (парсинге) логику извлечения, сохранения и обновления этих криптографических подписей инженерам приходится программировать вручную.

Изоляция сессий в Anti-detect браузерах

При мультиаккаунтинге стандартных механизмов браузера недостаточно. Антидетект-решения решают проблему «перекрестного загрязнения» куки путем создания физически изолированных директорий для каждого профиля на жестком диске. База данных одного цифрового отпечатка технически не способна получить доступ к ключам соседней сессии, что спасает фермы аккаунтов от массовых блокировок.

Панель настроек cookie

Каждый cookie имеет набор атрибутов, которые контролируют его поведение. Давайте рассмотрим их более детально.

Domain

Этот атрибут указывает, к какому домену браузер должен отправлять этот cookie.

  • Если атрибут domain не указан — cookie отправляется только точно на домен, где был установлен
  • Если атрибут domain указан — cookie отправляется на этот домен и все его поддомены
 
domain-rules.conf
# Cookie установлен на example.com
# Вариант 1: Domain не указан (или Domain=www.example.com)
Set-Cookie: sessionId=xyz; Domain=www.example.com
# Этот cookie отправляется при запросе к:
# - www.example.com ✓
# - api.www.example.com ✓
# - admin.www.example.com ✓
# - НО НЕ на api.example.com ✗

# Вариант 2: Domain=.example.com
Set-Cookie: theme=dark; Domain=.example.com
# Этот cookie отправляется при запросе к:
# - example.com ✓
# - www.example.com ✓
# - api.example.com ✓
# - любой.example.com ✓

Если на вашем сервере работают несколько приложений на разных поддоменах (`app1.example.com` и `app2.example.com`), и вы ставите cookie для одного, а потом перечитываете его в другом — это может не сработать. Нужно явно указать `Domain`.

Карта доменов и путей

Path

Указывает, какие пути на домене получат этот cookie.

Браузер отправляет cookie, если запрашиваемый путь начинается с указанного Path.

 
path-rules.http
# Установлено
Set-Cookie: admin_token=xyz; Path=/admin

# Отправляется при:
# GET /admin → ✓
# GET /admin/users → ✓
# GET /admin/users/john → ✓
# GET /profile → ✗
# GET /api/data → ✗

# Установлено
Set-Cookie: theme=dark; Path=/

# Отправляется при:
# GET / → ✓
# GET /anything → ✓
# GET /deep/nested/path → ✓

Если Path не указан, cookie отправляется только при запросе к точно такому же пути.

 
no-path-fallback.http
# Запрос был: GET /api/v1/users
# Установлено (без Path):
Set-Cookie: token=xyz

# Этот cookie будет отправляться ТОЛЬКО при запросе:
# GET /api/v1/users
# НЕ при GET /api/v1/ или GET /api/

Всегда явно указывайте `Path=/` для общих cookies. Если нужен специфичный путь — указывайте точно.

Время жизни cookie

Expires

Записывается в формате: HTTP-дата (RFC 1123)

 
expires.http
Set-Cookie: user=john; Expires=Wed, 09 Jun 2025 10:18:14 GMT

Удаляется когда текущее время превышает указанное в атрибуте `Expires`.

Зависит от системного времени клиента. Если пользователь поставил время неправильно — cookie удалится раньше или позже ожидаемого.

Max-Age

Формат: Количество секунд от текущего момента

 
max-age-set.http
Set-Cookie: user=john; Max-Age=3600    # Удалится через час
Set-Cookie: user=john; Max-Age=86400   # Удалится через день
Set-Cookie: user=john; Max-Age=31536000 # Удалится через год

Удаление cookie:

 
max-age-delete.http
Set-Cookie: user=john; Max-Age=0    # Удалить немедленно
Set-Cookie: user=john; Max-Age=-1   # Удалить немедленно

Если указаны оба атрибута и `Expires` и `Max-Age`, браузер использует `Max-Age`.

Рекомендую использовать `Max-Age` — это более надежнее и понятнее.

Secure — Только HTTPS

Браузер отправляет этот cookie только по HTTPS соединению. По HTTP он не отправляется.

 
secure.http
Set-Cookie: sessionId=xyz; Secure

Этот атрибут нужно использовать всегда для отправки таких данных как токены, пароли, идентификаторы сессии.

Флаг `Secure` можно установить ТОЛЬКО если соединение уже HTTPS.

 
app.js
// Это не сработает (страница на HTTP)
document.cookie = "token=xyz; Secure";  // ✗ Браузер будет игнорировать Secure
// Это сработает (страница на HTTPS)
document.cookie = "token=xyz; Secure";  // ✓
Защищённая cookie

HttpOnly — Защита от XSS

JavaScript не может читать или писать этот cookie через `document.cookie`. Cookie доступен только через HTTP (сервер ↔ браузер).

🚫

Влияние HttpOnly и Secure на скрейпинг

Наличие маркера HttpOnly делает невозможным экспорт сессии путем инъекции JS-кода в консоль страницы — парсерам приходится извлекать информацию исключительно на транспортном уровне. А игнорирование флага Secure при настройке программных сред автоматизации гарантированно приводит к потере авторизации при любых редиректах на HTTPS.

Set-Cookie: sessionId=xyz; HttpOnly

SameSite — Защита от CSRF и контроль кросс-сайт отправки

Самый важный атрибут в настоящее время. Он призван контролировать, отправляет ли браузер cookie при кросс-сайтовых запросах.

Три режима SameSite

У него есть три значения:

  • SameSite=Strict

Cookie никогда не отправляется при кросс-сайтовых запросах, даже при переходе по ссылке.

 
samesite-strict.txt
Пример:
- Вы залогинены в facebook.com (есть cookie session=abc)
- Вы на news.com (другой сайт)
- На news.com есть ссылка: <a href="https://facebook.com/profile">
- Вы кликаете по ссылке

С SameSite=Strict:
- Браузер НЕ отправляет facebook cookie
- Вы приходите на Facebook как незалогиненный
- Нужно заново логиниться
- Это плохо для UX, но максимально безопасно
  • SameSite=Lax

Cookie отправляется при смене URL в адресной строке с методом GET/HEAD. НЕ отправляется при POST запросе, внутри iframe, через fetch с кросс-сайта.

 
samesite-lax.txt
Примеры:
1. Вы на news.com, кликаете ссылку на facebook.com
   → Это top-level navigation, метод GET
   → Cookie session=abc отправляется ✓
   → Вы остаётесь залогиненным на Facebook

2. news.com в фоне посылает POST на facebook.com/transfer
   → Это кросс-сайт, но не top-level navigation
   → Cookie session НЕ отправляется ✗
   → CSRF атака не срабатывает

3. На news.com есть <img src="facebook.com/img.png">
   → Это кросс-сайт запрос
   → Cookie НЕ отправляется ✗

4. fetch('https://facebook.com/api', ...) с news.com
   → Это кросс-сайт запрос
   → Cookie НЕ отправляется ✗

Это сбалансированный вариант: нормальный UX, но защита от CSRF.

  • SameSite=None

Cookie отправляется во всех запросах, включая кросс-сайтовые.

 
samesite-none.http
Set-Cookie: trackingId=xyz; SameSite=None; Secure

Чтобы этот куки работал должен быть установлен флаг `Secure` (только HTTPS). Без него браузер игнорирует этот cookie.

Для чего используется: 

  • Third-party cookies (аналитика, реклама, встроенные фреймы)
  • Встроенные виджеты, которые должны работать на чужих сайтах
 
widget-embed.html
<!-- На сайте example.com -->
<iframe src="https://widget-provider.com/embed"></iframe>

Если `widget-provider.com` хочет отследить пользователя, ему нужен `SameSite=None`.

Почему Сайты Просят Разрешение на Cookies

Уверен, многие видели этот баннер — «Мы Используем Cookies»

Cookie баннер с тёмными паттернами

«Этот сайт использует cookies для улучшения вашего опыта. Нажмите ‘Согласен’ чтобы продолжить.»

Почему это появилось:

В Европе с 2018 года действует закон GDPR, который и обязал сайты получать ваше согласие перед использованием cookies. В Америке есть схожий закон — CCPA, как и в России (152-ФЗ), и как результат теперь почти все сайты должны показывать этот баннер.

Что означает «Согласен»:

  • Вы разрешаете сайту использовать cookies
  • Вы разрешаете отслеживание (если выбрали все опции)
  • Вы даёте согласие на сбор данных о вас

Что означает «Отклонить» или «Только необходимые»:

  • Вы не разрешаете отслеживание
  • Вы разрешаете только очень необходимые cookies (логин, безопасность)
Честный и нечестный баннеры

Важно знать:

  • Большинство людей просто кликают «Согласен» не читая
  • На самом деле вы можете выбрать, какие cookies разрешить
  • Часто кнопка «Согласен» большая и заметная, а «Отклонить» маленькая и неприметная (так называемый тёмный паттерн для обмана)
«

Успешный обход современных систем противодействия автоматизации строится на жесткой изоляции хранилищ состояний.

Простая инъекция JSON-файла с куками в headless-браузер без соблюдения строгой привязки к домену и флагам безопасности (SameSite, HttpOnly) — это гарантированный путь к потере сессии при первом же редиректе.

VH
Автор статьи Эксперт по автоматизации и обходу антифрод-систем
💡

Альтернативный подход: Stateless-парсинг

Существует и радикальный подход — полный отказ от сохранения состояния (stateless). При каждой итерации скрейпинга генерируется абсолютно чистая сессия. Это гарантирует отсутствие исторического следа, по которому антифрод-системы могли бы вычислить бота. Однако за такой подход приходится платить высокую цену: многократное увеличение вычислительной нагрузки на прохождение первичных проверок (например, Cloudflare) при каждом новом запросе.

 

Технология / Флаг Описание Влияние на парсинг и безопасность
Set-Cookie Header Директива управления хранилищем Инициирует запись новых ключей. Парсеры должны уметь перехватывать и сохранять эти заголовки.
HttpOnly Атрибут изоляции памяти Блокирует JS Делает куки невидимыми для document.cookie. Защищает от XSS.
Secure Маркер транспортной защиты Только HTTPS Требует строгой настройки SSL/TLS в скриптах автоматизации.
SameSite Политика кросс-доменных запросов Критично Блокирует передачу сессии при эмуляции API со сторонних доменов. Защита от CSRF.

Заключение

Cookie как сложный механизм внутри браузера

Cookies — это простой на поверхности, но довольно глубокий механизм. Понимание как он работает дает раскрывает очередной ноунэйм механизм из сферы IT в другом ракурсе.

Оцените статью
autoparse.tech
Добавить комментарий