Перейти к основному содержимому

2. Сессии в PHP

Что такое сессии в PHP?​

Junior

Ответ: Сессия — это способ хранения информации (в переменных), которая используется на нескольких страницах. В отличие от куки (cookie), информация не хранится на компьютере пользователя, а сохраняется на сервере. Сессии используются для сохранения данных пользователя (например, статуса авторизации, товаров в корзине) между различными запросами во время одного визита на сайт.


Junior

Ответ: Куки в основном используются для хранения идентификатора сессии (Session ID) на стороне клиента. Сами данные сессии остаются на сервере, но кука служит «ключом», который браузер предъявляет серверу, чтобы тот мог определить, какие именно данные сессии относятся к текущему пользователю.


Куки против Сессий: в чём ключевая разница?​

Junior

Ответ:

  • Место хранения: Куки хранятся на клиенте (в браузере); сессии — на сервере.
  • Безопасность: Сессии более безопасны, так как сами данные не передаются пользователю.
  • Объём данных: Куки имеют ограничение по размеру (обычно 4 КБ); сессии могут хранить гораздо большие объемы данных.
  • Срок жизни: Куки могут храниться долго; сессии обычно истекают при закрытии браузера или после периода неактивности.

Что стоит хранить в сессиях?​

Junior

Ответ: В сессиях следует хранить только необходимые нечувствительные данные, которые должны сохраняться между запросами, такие как ID пользователя (для проверки авторизации), flash-сообщения или временное состояние (например, корзина покупок). Избегайте хранения тяжелых объектов, паролей (в открытом виде) или больших объемов данных, которые лучше хранить в базе данных.


Как работают сессии «под капотом»?​

Middle

Ответ: Когда запускается сессия (session_start()), PHP генерирует уникальный идентификатор сессии (Session ID). Этот ID обычно отправляется в браузер пользователя в виде куки (по умолчанию называется PHPSESSID). При последующих запросах браузер отправляет эту куку обратно. PHP использует этот ID для получения данных сессии из хранилища сервера (по умолчанию это файлы в папке /tmp, но можно использовать Redis или базу данных). Перед сохранением данные внутри PHP сериализуются.


Каков жизненный цикл сессии в PHP?​

Middle

Ответ: Жизненный цикл состоит из четырех основных этапов: 1) Начало запроса (клиент отправляет куку с ID сессии); 2) Инициализация (session_start() блокирует хранилище, читает данные и заполняет $_SESSION); 3) Выполнение (скрипт взаимодействует с данными); 4) Завершение (PHP сериализует $_SESSION, записывает данные обратно в хранилище и снимает блокировку). Подробный жизненный цикл сессии


Как работают сессии в RoadRunner и есть ли ограничения?​

Middle

Ответ: В долгоживущих средах, таких как RoadRunner, следует избегать использования стандартного глобального массива $_SESSION и функции session_start(), так как они полагаются на глобальное состояние и файловое хранилище, которое плохо масштабируется в персистентных воркер-процессах. Вместо этого следует использовать централизованное неблокирующее хранилище, такое как Redis или база данных, и управлять состоянием сессий через PSR-7 middleware или встроенные драйверы фреймворков (например, Laravel sessions), которые не зависят от традиционного жизненного цикла сессий в php-fpm.


Как сессии используются в современной разработке?​

Middle

Ответ: Современная разработка на PHP (особенно с использованием фреймворков вроде Laravel или Symfony) рассматривает сессии как абстракцию. Вместо прямой манипуляции с $_SESSION разработчики используют сервисы сессий. Для обеспечения масштабируемости данные сессий теперь редко хранятся в файлах на сервере; вместо этого используются распределённые хранилища, такие как Redis, Memcached или база данных. В случае stateless API сессии часто заменяются на JWT (JSON Web Tokens).