HTTP-сессии
Request::session() предоставляет отдельный объект Session; session_start() не требуется. Идентификатор передаётся cookie, данные остаются у handler. Настройка статическая в рамках worker, сами данные принадлежат экземпляру.
Данные и сохранение
Заголовок раздела «Данные и сохранение»get($key, $default) использует ??: null возвращает default. has() использует isset, exists() — array_key_exists. set()/put() изменяют значения; put принимает также массив. delete()/forget() удаляют ключи, pull() читает и удаляет, all() возвращает данные, flush() очищает всё.
save() записывает изменённые данные через serialize; пустая изменённая сессия вызывает destroy. При чтении unserialize запрещает классы объектов. При отсутствии изменений timestamp обновляется только с Session::$autoUpdateTimestamp; refresh() обновляет его явно. gc() запускает очистку с Session::$lifetime.
Ограничение текущей реализации: save игнорирует bool от write/destroy и сбрасывает dirty-флаг даже при false. Исключение handler видно при явном save, но деструктор перехватывает Throwable. Поэтому нельзя считать завершённый запрос доказательством сохранения сессии. Handler может выбрасывать исключения при ошибке, а приложение — явно сохранять и обрабатывать сбой до успешного ответа.
Хранилище
Заголовок раздела «Хранилище»Session::setHandler($instance)/handler($instance) задают SessionHandlerInterface. handlerClass($class, $config) проверяет интерфейс и сбрасывает singleton. Методы интерфейса: open, close, read, write, destroy, gc, updateTimestamp. Фасад самостоятельно не организует полный PHP session lifecycle через open/close.
По умолчанию FileSessionHandler использует session_save_path либо временную директорию localzet-sessions. Настройте постоянный закрытый от HTTP путь через handlerClass(FileSessionHandler::class, ['save_path' => $path]). Запись temp+rename предотвращает частично прочитанный файл, но не потерю обновлений при одновременном read-modify-write. Для нескольких узлов требуется общее хранилище с определённой моделью конкурентности; оно не появляется автоматически.
Cookie и безопасность
Заголовок раздела «Cookie и безопасность»Session::setCookieParams() принимает lifetime/path/domain/secure/httponly/samesite; getCookieParams() возвращает карту. Инициализация читает PHP ini, поэтому явно задайте требуемую политику до обработки запросов. Cookie lifetime и lifetime хранения различаются. Смотрите управление идентификатором.
Сессия не заменяет авторизацию, CSRF, ограничения попыток входа или отзыв доступа. Не сохраняйте объекты сервисов/соединений; используйте минимальные сериализуемые данные. GC вероятностный, а не расписание точного удаления.