Введение в куки

В основе работы веба лежит протокол HTTP, который является сессионным протоколом без сохранения состояния. Это значит, что каждый запрос к серверу обрабатывается независимо, и сервер не "помнит", кто к нему обращался ранее.
Куки решают эту проблему. Куки - это небольшой фрагмент данных, который сервер отправляет браузеру. Браузер может сохранить его и отправлять обратно при последующих запросах к тому же серверу. Так сервер понимает, что запросы идут от одного и того же браузера.
Куки также называют веб-куки, HTTP-куки или браузерные куки. В этом уроке для краткости используется термин "куки".

Как работают куки

  1. Браузер отправляет запрос серверу. Сервер не знает ничего о браузере.
  2. Сервер создаёт куки (например, с именем return и значением 1) и добавляет её к HTTP-ответу. Для этого используется функция setcookie().
  3. Браузер сохраняет куки.
  4. При следующем запросе браузер отправляет сохранённую куки в заголовке HTTP-запроса.
  5. Сервер получает куки через суперглобальный массив $_COOKIE и может использовать эти данные.
  6. Сервер отвечает, формируя контент с учётом значения куки.
Ограничения:
  • Размер одной куки до 4 КБ (зависит от браузера).
  • У куки есть срок действия (expiration date), который может задавать сервер.
  • Куки привязаны к домену и пути, с которых были созданы. Сайт не может читать куки, установленные другим сайтом.
  • Пользователи могут запретить сохранение куки в настройках браузера. Не стоит хранить в куки критически важные данные.

Зачем использовать куки

Куки применяются для:
  • Управления сессиями (например, запоминание пользователя и его логина).
  • Персонализации (сохранение настроек, тем, предпочтений).
  • Отслеживания (запись действий пользователя, например, просмотренных товаров для рекомендаций).

Установка куки в PHP

PHP предоставляет функцию setcookie() для создания куки.

Синтаксис (до PHP 7.3.0):

Синтаксис (PHP 7.3.0 и новее):

В массиве $options можно указывать ключи: expirespathdomainsecurehttponlysamesite(None, Lax, Strict).
Функция возвращает true, если заголовок успешно отправлен (не гарантирует, что браузер принял куки), и false при ошибке.

Работа с массивом $_COOKIE

Массив $_COOKIE - это ассоциативный массив, где хранятся все полученные от браузера куки.

Доступ к значению:

Если в имени куки есть точки или пробелы, они заменяются на подчёркивания.

Проверка существования:

Проверка значения:

Удаление куки:

PHP не имеет отдельной функции для удаления куки. Для этого нужно установить срок действия в прошлое:

Пример использования куки в PHP

Пример: приветствие нового или возвращающегося посетителя.
Как это работает:
  1. Определяется константа ONE_WEEK (7 дней в секундах).
  2. Переменная $returning_visitor изначально false.
  3. Если куки return false - создаём её на неделю.
  4. Если есть - отмечаем посетителя как возвращающегося.
  5. Выводим соответствующее приветствие.
При первом посещении: Welcome to my website!
При повторном (в течение недели): Welcome back!

Итог

  • Куки - это способ сервера "узнавать" браузер между запросами.
  • Для работы с куки в PHP используйте setcookie() и массив $_COOKIE.
  • Не храните в куки секретные данные.
  • Куки удобны для сессий, персонализации и аналитики.