Cookie (куки)

2 августа 2026 · ~13 мин чтения

веб http приватность безопасность аналитика

Cookie (куки)

Небольшой фрагмент данных, который сервер просит браузер сохранить и присылать обратно с каждым следующим запросом. Так веб-сайт «узнаёт» тебя между кликами и посещениями.

История

Что это такое

Кука — это пара «имя = значение» плюс метаданные (домен, путь, срок жизни, флаги). Хранится браузером на диске или в памяти. Отправляется автоматически при каждом запросе к тому же домену, откуда пришла.

Технически всё выглядит просто. Сервер добавляет в HTTP-ответ заголовок:

Set-Cookie: session_id=abc123; Domain=example.com; Path=/; Max-Age=3600; HttpOnly; Secure; SameSite=Lax

Браузер разбирает эту строку, проверяет атрибуты и сохраняет пару session_id=abc123 в базу кук для домена example.com. В каждый следующий запрос к этому домену браузер сам добавляет заголовок:

Cookie: session_id=abc123

Размер одной куки ограничен 4 килобайтами. Браузеры хранят от 50 до 300 кук на домен и десятки тысяч всего.

Что кладут внутрь на практике:

Чего в куке нормально быть не должно: пароль в открытом виде, платёжные данные, персональные данные без шифрования. Кто так делает — попадает под GDPR и штрафы.

Cookie vs Session vs LocalStorage. Часто путают, поэтому фиксирую отличия:

Аналогии из жизни

1. Гардеробный номерок. Ты приходишь в театр, отдаёшь пальто — тебе дают жетон с номером. По этому номеру гардеробщик находит твоё пальто. Сам жетон маленький и ничего личного не хранит. Номер — это session_id, гардероб — сервер, пальто — твой профиль.

Где ломается: пальто отдают только по жетону, потерял жетон — идёшь с паспортом. С куки не так: если её украли, злоумышленник получает твою сессию, не зная тебя в лицо. Отсюда флаги HttpOnly и Secure — попытка сделать «жетон» сложнее украсть.

2. Штамп на руке в клубе. Один раз заплатил на входе — тебе поставили печать. Дальше ходишь туда-сюда, охрана видит печать и пускает без вопросов. Печать — кука аутентификации, охрана — сервер, который её проверяет.

Где ломается: печать держится один вечер и смывается в душе. Кука может жить неделями, месяцами, «навсегда» (Max-Age на 10 лет). И печать невозможно поставить незаметно — а куки браузер принимает автоматически, ты можешь и не знать, что их у тебя тысячи.

3. Твоя тележка в супермаркете. Пока ходишь по магазину, тележка едет за тобой. Кассир на выходе видит, что в ней. Ушёл — магазин про тебя забыл.

Где ломается: тележку видит только магазин, где ты её взял. А third-party cookies работают наоборот — рекламная сеть узнаёт тебя во всех магазинах, где стоит её камера. Аналог в физическом мире трудно подобрать, потому что там нет таких сквозных наблюдателей: только видеосистема, которая ставит камеры сразу в тысячах магазинов и связывает записи по лицу.

Как это работает

Пошагово. Ты первый раз заходишь на example.com:

  1. Браузер отправляет GET / HTTP/1.1 с заголовком Host: example.com. Кук у него нет — он их и не отправляет.
  2. Сервер отвечает: HTTP/1.1 200 OK + тело страницы + заголовок Set-Cookie: session=xY9pZ...; Path=/; Max-Age=1209600; HttpOnly; Secure; SameSite=Lax.
  3. Браузер видит Set-Cookie, проверяет атрибуты (домен подходит? Secure ли соединение?), и сохраняет пару session=xY9pZ... в базу кук для домена example.com.
  4. Ты кликаешь на ссылку /profile. Браузер отправляет GET /profile — и автоматически добавляет заголовок Cookie: session=xY9pZ....
  5. Сервер видит куку, ищет по её значению пользователя в базе сессий и отдаёт твой профиль.

Ключевые атрибуты Set-Cookie — это и есть 80% практической темы:

Ключевое различие: first-party vs third-party.

Схематично поток сессионной куки:

Ты                Браузер              Сервер
 |  открыть сайт   |                     |
 |---------------->|  GET /              |
 |                 |-------------------->|
 |                 |  200 OK             |
 |                 |  Set-Cookie: sid=X  |
 |                 |<--------------------|
 |                 |  [запомнить куку]   |
 |                 |                     |
 |  кликнуть       |                     |
 |---------------->|  GET /profile       |
 |                 |  Cookie: sid=X      |
 |                 |-------------------->|
 |                 |  200 OK, твой профиль
 |                 |<--------------------|

Кука — это не «пользователь». Кука — это доказательство, что *этот же браузер* уже был здесь. Всё, что означает кука для сервера, — «я тебя видел». Кто конкретно за экраном, кука сказать не может.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Альтернативы и конкуренты

Когда НЕ стоит использовать

Никогда не выдавай сессионную куку без флагов HttpOnly и Secure на HTTPS-сайте. Одна забытая пара флагов = целый класс атак (XSS-угон сессии, sniffing на публичном Wi-Fi). Проверить свой сайт можно любым онлайн-сканером кук за 30 секунд.

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера в работе над контекстным пулом Яндекс.Директа я думал, что достаточно ротировать IP через прокси, чтобы «вскрыть» весь пул подмен номеров. Реальность оказалась другой: контроль на одном IP с ротацией браузерных контекстов дал тот же прирост, что и на нескольких IP. Прозрение: ключ сессии в этом сценарии — не IP-адрес, а cookie. Каждый новый браузерный контекст = новая cookie = новый визит с точки зрения системы, вычерпывает пул. Ротация IP нужна только против антибот-троттлинга, не против самого пула.

Краткое резюме