Ответ вслух Senior Сессии и безопасность обновлено

Сессии против токенов

Вопрос

Как вы выбираете между сессиями и JWT для аутентификации в PHP-проекте?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Для классического сайта и SPA на своём домене выбираю сессии: состояние хранится на сервере, выход и блокировка пользователя работают мгновенно, а cookie с HttpOnly, Secure и SameSite недоступна скриптам. Чтобы масштабироваться на несколько серверов, сессии кладу в Redis, а не в файлы.

Что должно прозвучать в ответе

  • Сессии: состояние на сервере, легко отозвать, cookie с HttpOnly

  • Для горизонтального масштабирования сессии в Redis, а не в файлах

  • JWT: без состояния, но отзыв сложен, нужен короткий срок и refresh-токены

  • Где хранить токен в браузере: httpOnly cookie против localStorage и XSS

  • Laravel Sanctum: cookie для SPA своего домена, токены для мобильных клиентов

  • Проверки JWT: подпись, alg, exp, aud, iss

Что могут спросить следом

  • Как отозвать JWT до истечения срока?
  • Что меняется, если фронтенд на другом домене?

Разбор

Для классического сайта и SPA на своём домене выбираю сессии: состояние хранится на сервере, выход и блокировка пользователя работают мгновенно, а cookie с HttpOnly, Secure и SameSite недоступна скриптам. Чтобы масштабироваться на несколько серверов, сессии кладу в Redis, а не в файлы. В Laravel для SPA это Sanctum в режиме cookie.

JWT удобен для мобильных клиентов и межсервисного взаимодействия: сервер не хранит состояние. Цена в том, что токен нельзя просто отозвать. Поэтому делаю короткий срок жизни access-токена, refresh-токен с ротацией храню на сервере, а при проверке валидирую подпись с фиксированным алгоритмом, exp, aud и iss.

Если токен живёт в браузере, не кладу его в localStorage: любой XSS его украдёт. httpOnly-cookie надёжнее, но тогда нужна защита от CSRF. Выбор в итоге зависит от клиентов: свой веб, сторонние интеграции или мобильное приложение.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.