Самоучитель: PHP 8.5: инженерный практикум
Глава 11 из 22III. Веб-граница100 минут

Глава 11. Сессионное состояние, черновики и идемпотентность

Сессия хранит короткий контекст взаимодействия, но долговечная тренировка и её правила принадлежат базе; случайный cookie только связывает запрос с серверным состоянием.

После главы вы сможете
  • ограничить содержимое сессии
  • ротировать идентификатор
  • спроектировать повтор команды

Cookie содержит ссылку, а не профиль

Session cookie передаёт непредсказуемый идентификатор. Роли, права и предметные данные остаются на сервере и могут быть пересчитаны. Не сериализуйте в cookie корзину объектов или разрешения, если клиент способен изменить значение либо данные быстро устаревают.

Secure ограничивает передачу HTTPS, HttpOnly закрывает чтение из JavaScript, SameSite задаёт кросс-сайтовое поведение. Domain и Path должны быть минимально широкими, а срок жизни соответствует назначению.

Жизненный цикл сессии

Сессия дневникаИдентификатор меняется после аутентификации и изменения уровня доверия, старое состояние уничтожается.Anonymousnew idLoginrotateUseserver dataPrivilegerotateLogoutinvalidate
Идентификатор меняется после аутентификации и изменения уровня доверия, старое состояние уничтожается.

Черновик — не всегда сессия

Незаполненная форма на один переход может жить в сессии. Черновик, который пользователь ожидает увидеть завтра или на другом устройстве, является предметной записью в базе с владельцем и версией.

Параллельные вкладки создают гонки: одна меняет flash или общий черновик, другая читает. Имена ключей должны быть ограничены конкретным flow, а длительная блокировка session storage снимается после чтения необходимых данных.

Ключ повтора

Клиент создаёт случайный idempotency key для команды публикации. Сервер хранит связь ключа, пользователя, типа команды и результата под уникальным ограничением. Повтор с тем же содержимым возвращает прежний результат, а с другим содержимым считается конфликтом.

Не используйте session id как ключ идемпотентности: в одной сессии выполняются разные команды, а после ротации идентификатор меняется. Предметный уникальный ключ иногда проще — например, один дневной итог на пользователя и дату.

Минимизация и срок

Храните user id, короткий flash и технический flow id. Не кладите пароль, токены восстановления, полный объект пользователя или огромный результат импорта. При изменении прав сервер загружает актуальное состояние, а не доверяет старому массиву session.

Сессии имеют абсолютный и неактивный timeout. Продление активности не должно делать сеанс бессрочным. Чувствительные действия могут требовать повторной аутентификации независимо от общей сессии.

Лабораторная работа

Опишите ключи сессии для входа, flash и одноразового flow создания тренировки. Добавьте ротацию при входе и уникальный ключ публикации, затем смоделируйте две параллельные вкладки.

Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Перелинковка со справочником

Проверка актуальности

  • cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie