PHP: Разработка микрофреймворка
Теория: Куки
Куки в PHP
Куки позволяют хранить небольшие данные на стороне браузера и отправлять их обратно в каждом подходящем запросе.
В PHP работа с куки строится вокруг двух вещей:
- Чтение через
$_COOKIE. - Установка через
setcookie().
Чтение куки
Текущие куки запроса доступны в суперглобальном массиве $_COOKIE.
Обычно это простой набор пар ключ-значение.
Установка куки
Для установки используется функция setcookie(). Она позволяет задать не только имя и значение, но и дополнительные ограничения.
Пример из теории:
В этом примере сразу несколько вариантов: сессионная кука, постоянная кука и куки с дополнительными параметрами path, domain и HttpOnly.
Сессионные и постоянные куки
Есть два основных типа:
- Сессионные куки.
- Постоянные куки.
Сессионная кука создается без времени истечения и живет до закрытия браузера.
Постоянная кука создается с expires и хранится дольше:
В примере кука будет жить 10000 секунд.
Параметры path и domain
Куки отправляются не всегда, а только когда совпадают условия области видимости.
Главные параметры:
path.domain.
Если кука установлена с path=/about, она не придет на маршрут /.
Если кука установлена для другого домена, она тоже не попадет в текущий запрос.
Из-за этого часть установленных куки может не отображаться на конкретной странице.
Параметры HttpOnly и Secure
При установке можно включать дополнительные флаги:
HttpOnly.Secure.
HttpOnly запрещает доступ к куке из JavaScript.
Secure разрешает отправку куки только по HTTPS.
Оба флага полезны для повышения безопасности.
Как это выглядит в HTTP
При установке куки сервер отправляет заголовки Set-Cookie.
Обычно формат такой:
Если установить несколько куки, сервер вернет несколько заголовков Set-Cookie.
Важное замечание про REQUEST
В PHP есть $_REQUEST, где смешаны $_GET, $_POST и $_COOKIE.
В прикладном коде лучше не опираться на $_REQUEST.
Причины:
- Трудно понять, откуда пришло значение.
- Проще допустить ошибку в валидации.
- Выше риск уязвимостей из-за смешивания источников.
Надежнее читать данные напрямую из нужного массива.
Итог
На базовом уровне для работы с куки достаточно помнить следующее:
- Читать куки из
$_COOKIE. - Устанавливать куки через
setcookie(). - Настраивать
expires,path,domain,HttpOnlyиSecureпод задачу.

