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

Что такое Cookies?

1.0 Junior🔥 232 комментариев
#API и веб-протоколы

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

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

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

Что такое Cookies?

Cookies (куки) — это небольшие фрагменты данных, которые сервер отправляет браузеру пользователя, и которые браузер сохраняет на стороне клиента, а затем автоматически отправляет обратно на сервер с каждым последующим запросом. Они являются фундаментальным механизмом управления состоянием (state management) в изначально "статус-лесс" (stateless) протоколе HTTP, позволяя запоминать информацию о пользователе между отдельными запросами.

Основные цели и применение Cookies

Куки решают несколько ключевых задач в веб-разработке:

  • Аутентификация и сессии: Самый распространенный случай. После успешного логина сервер создает уникальный идентификатор сессии (session ID), отправляет его в куки браузеру. При каждом новом запросе браузер передает этот ID, и сервер по нему находит данные сессии пользователя (например, в $_SESSION в PHP).
  • Персонализация: Запоминание предпочтений пользователя: языковой настройки, темы оформления, региона.
  • Отслеживание: Сбор аналитики о поведении пользователя на сайте (часто реализуется через сторонние куки). Также используются для A/B-тестирования.
  • Корзина покупок: В e-commerce куки могут временно хранить содержимое корзины, пока пользователь бродит по сайту.

Техническое устройство Cookies

Куки передаются через HTTP-заголовки.

  • Установка куки (от сервера к браузеру): Сервер включает в ответ (response) заголовок Set-Cookie.
    HTTP/1.1 200 OK
    Set-Cookie: session_id=abc123; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/; Secure; HttpOnly
    
  • Отправка куки (от браузера к серверу): Браузер включает все куки, соответствующие домену и пути запроса, в заголовок Cookie каждого последующего запроса.
    GET /profile HTTP/1.1
    Cookie: session_id=abc123; user_lang=ru
    

Ключевые атрибуты Cookies (директивы)

При установке куки можно задавать параметры, управляющие ее "жизнью" и безопасностью:

  • expires / Max-Age: Задает время жизни. Без них кука становится "сессионной" (session cookie) и удаляется при закрытии браузера.
  • domain и path: Определяют область видимости (scope) куки — к каким доменам и путям на сервере она будет прикрепляться. Кука, установленная для example.com, будет отправляться и на shop.example.com (если domain не указан явно иначе).
  • Secure: Кука будет передаваться только по защищенному протоколу HTTPS. Критически важный атрибут для безопасности.
  • HttpOnly: Запрещает доступ к куке через JavaScript (через document.cookie). Это основная защита от межсайтового скриптинга (XSS) — атакующий скрипт не сможет украсть такую куку.
  • SameSite: Современный и мощный атрибут для борьбы с CSRF (межсайтовой подделкой запросов). Он контролирует, будет ли кука отправляться с запросами, инициированными с других сайтов.
    *   `Strict`: Кука никогда не отправляется с кросс-сайтовыми запросами.
    *   `Lax` (рекомендуемое значение по умолчанию): Кука отправляется только с безопасными кросс-сайтовыми запросами (например, переход по ссылке).
    *   `None`: Кука отправляется со всеми запросами. При этом **обязательно** требуется установка атрибута `Secure`.

Работа с Cookies в PHP

PHP предоставляет глобальный массив $_COOKIE для чтения кук, полученных от клиента, и функцию setcookie() для их установки.

// УСТАНОВКА куки (действительна 1 час, только для HTTPS, недоступна для JS)
setcookie(
    'user_preference', // Имя
    'dark_theme',      // Значение
    time() + 3600,     // Время истечения (timestamp)
    '/',               // Путь
    '.example.com',    // Домен
    true,              // Secure (только HTTPS)
    true               // HttpOnly
);

// ЧТЕНИЕ куки
if (isset($_COOKIE['user_preference'])) {
    $theme = $_COOKIE['user_preference'];
    echo "Выбранная тема: " . htmlspecialchars($theme);
}

// УДАЛЕНИЕ куки (устанавливаем срок истечения в прошлое)
setcookie('user_preference', '', time() - 3600, '/');

Важное замечание: Функцию setcookie() необходимо вызывать до любой отправки контента (даже пробелов или HTML), так как она манипулирует HTTP-заголовками.

Безопасность Cookies и современные тенденции

Куки, особенно для аутентификации, — лакомая цель для атак.

  • XSS-атаки: Смягчаются атрибутом HttpOnly.
  • CSRF-атаки: Смягчаются атрибутом SameSite и дополнительными токенами (CSRF-token).
  • Перехват трафика (MITM): Смягчается атрибутом Secure.
  • Незашифрованное хранение: Никогда не храните в куках чувствительные данные (пароли, данные карт). Храните только случайный уникальный ключ (session ID), а сами данные — на сервере.

В современном вебе набирают популярность альтернативные механизмы хранения на клиенте, такие как localStorage и sessionStorage (Web Storage API), но они не заменяют куки полностью, так как их данные не автоматически отправляются на сервер и они уязвимы для XSS. Куки остаются незаменимыми для задач, требующих автоматической передачи данных с каждым запросом, прежде всего — для управления сессиями пользователя.

Что такое Cookies? | PrepBro