← Назад к вопросам

Какие знаешь виды cookie?

2.0 Middle🔥 122 комментариев
#Браузер и сетевые технологии

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды HTTP Cookie

В современной веб-разработке cookie (куки) являются фундаментальным механизмом сохранения состояния между HTTP-запросами. Их можно классифицировать по нескольким ключевым признакам.

1. По сроку жизни (Lifetime)

  • Сессионные куки (Session Cookies):
    *   Не имеют явного срока жизни (`Expires` или `Max-Age`).
    *   Существуют только в течение текущей сессии браузера. Сессия обычно завершается при закрытии вкладки или всего браузера.
    *   Хранятся в памяти процесса браузера (RAM), а не на диске.
    *   Часто используются для временных данных: корзина покупок, данные формы до отправки, идентификатор сессии на стороне сервера.

```http
Set-Cookie: sessionId=abc123; Path=/
// Отсутствуют атрибуты Expires и Max-Age
```
  • Постоянные куки (Persistent / Permanent Cookies):
    *   Имеют явно заданную дату истечения срока действия через атрибут `Expires` или продолжительность через `Max-Age`.
    *   Сохраняются на диске пользователя и переживают перезапуск браузера.
    *   Удаляются только по истечении срока, вручную пользователем или скриптом.
    *   Применяются для функций "запомнить меня", долгосрочных предпочтений пользователя, аналитики.

```http
Set-Cookie: userId=789; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Path=/
Set-Cookie: theme=dark; Max-Age=2592000; Path=/ // Действует 30 дней
```

2. По области видимости (Scope)

Область видимости определяется атрибутами Domain и Path.

  • Суперкуки (Supercookies):
    *   Технический термин, часто обозначающий куки, установленные для домена верхнего уровня (например, `.com`). Современные браузеры **строго запрещают** их из соображений безопасности, так как они могли бы отслеживать пользователя across множества сайтов.
  • Основные доменные куки (Domain Cookies):
    *   Устанавливаются для конкретного домена и всех его поддоменов с помощью атрибута `Domain`. Если атрибут не указан, куки привязываются только к origin, установившему его.
```http
// Куки доступны для site.com, www.site.com, api.site.com
Set-Cookie: authToken=xyz; Domain=site.com; Path=/
// Куки доступен ТОЛЬКО для secure.site.com
Set-Cookie: csrfToken=abc; Path=/
```
  • Путевые куки (Path Cookies):
    *   Ограничены определенным путем (`Path`) на сервере. Браузер отправляет такие куки только при запросах к этому пути и его подпути.
```http
// Куки будет отправлен при запросах к /admin и /admin/settings, но не к / или /blog
Set-Cookie: adminSession=123; Path=/admin; HttpOnly
```

3. По уровню безопасности и назначению

  • Безопасные куки (Secure Cookies):
    *   Передаются только по зашифрованному **HTTPS** соединению. Это критически важно для защиты конфиденциальных данных (токенов аутентификации) от перехвата в открытых сетях.
```http
Set-Cookie: sessionId=sekret123; Secure; HttpOnly
```
  • HttpOnly куки:
    *   Недоступны для чтения или изменения через JavaScript (`document.cookie`). Это основная защита от **XSS**-атак (межсайтового скриптирования), целью которых часто является похищение сессионных куки.
  • Куки SameSite:
    *   Современный атрибут, контролирующий, отправляются ли куки с cross-site запросами. Ключевая защита от **CSRF**-атак (межсайтовая подделка запроса) и улучшение конфиденциальности.
    *   `Strict`: Куки никогда не отправляются при переходе с другого сайта. Идеально для критичных операций (выход из аккаунта, перевод средств).
    *   `Lax`: (Значение по умолчанию в современных браузерах). Куки отправляются при безопасных cross-site навигационных запросах (например, переход по ссылке), но не при cross-site POST-запросах или загрузках ресурсов (iframe, img).
    *   `None`: Куки отправляются при всех cross-site запросах. **Требует обязательного флага `Secure`**.
```http
Set-Cookie: cartId=item55; SameSite=Lax; Path=/
Set-Cookie: session=id456; SameSite=Strict; Secure; HttpOnly
```
  • Куки для отслеживания (Third-Party Tracking Cookies):
    *   Устанавливаются доменом, отличным от того, который пользователь видит в адресной строке (например, рекламным скриптом или пикселем аналитики, загруженным с другого домена). Их использование все больше ограничивается браузерами (Safari ITP, Firefox ETP, Chrome с отказом от third-party cookies).

4. По архитектуре хранения (Modern Alternatives)

С появлением Client-Side Storage API некоторые типы данных перестали хранить в классических куки, но логически их можно отнести к этой категории.

  • Куки для состояния сервера (Server-Side State Cookies):
    *   Содержат только **идентификатор сессии** (случайную строку). Все фактические данные пользователя хранятся в базе данных или кэше на сервере (например, в Redis). Это наиболее безопасный и масштабируемый подход.
  • Клиентские куки (Client-Side State Cookies):
    *   Устаревшая практика, когда в куки хранили сами данные (имя пользователя, email, настройки). Сегодня для этого используют **`localStorage`**, **`sessionStorage`** или **IndexedDB**, которые предоставляют больший объем (5-10 МБ и более) и более удобный API.

Вывод: Выбор типа куки — это всегда баланс между функциональностью, удобством пользователя, безопасностью и конфиденциальностью. Современные best practices диктуют использование HttpOnly, Secure и SameSite атрибутов для всех критичных куки, предпочтение сессионных куки для временных данных и хранение данных приложения в специализированных Client-Side Storage API, а не в самих куки. Понимание этих различий необходимо для построения безопасных, отказоустойчивых и пользовательских веб-приложений.

Какие знаешь виды cookie? | PrepBro