Ответ
Сессии в PHP решают проблему отсутствия состояния (stateless) у HTTP-протокола. Они позволяют сохранять данные, относящиеся к конкретному пользователю, между его запросами. Без сессий каждый запрос был бы полностью независимым.
Основные сценарии моего использования:
- Аутентификация пользователя. После логина я сохраняю в
$_SESSION['user_id']идентификатор, который проверяю на каждой защищённой странице. - Корзина покупок. Пока пользователь не оформил заказ, товары хранятся в сессии.
- Одноразовые сообщения (Flash-сообщения). Например, «Заказ успешно создан» — сохраняю в сессии после редиректа и удаляю после первого отображения.
Пример реализации простой аутентификации:
// login.php
session_start();
if ($credentialsAreValid) {
$_SESSION['authenticated'] = true;
$_SESSION['user_id'] = $userId;
// Регенерация ID для защиты от фиксации сессии
session_regenerate_id(true);
}
// dashboard.php
session_start();
if (empty($_SESSION['authenticated'])) {
header('Location: /login.php');
exit;
}
// Пользователь аутентифицирован, показываем дашборд
$currentUserId = $_SESSION['user_id'];
Важные технические детали из моего опыта:
- По умолчанию данные сессии хранятся в файлах на сервере (
session.save_handler = files). В production я настраиваю хранение в Redis для скорости и удобства масштабирования. - Критически важно управлять идентификатором сессии (session ID). Я всегда использую
session_regenerate_id(true)после логина для предотвращения атак. - Для безопасности также настраиваю
session.cookie_secureиsession.cookie_httponlyвphp.ini.