Где хранятся сессии и куки
Что проверяют
Различаете ли вы данные сессии и её идентификатор и знаете ли, где посмотреть их руками. Для тестировщика следом почти всегда идёт практика: как проверить, что после выхода сессия действительно закрыта.
Как отвечать
- куки: хранятся в браузере, в профиле пользователя. Сервер ставит их заголовком
Set-Cookie, браузер сам возвращает их в заголовкеCookieна подходящий домен и путь. БезExpiresилиMax-Ageкука сессионная и живёт до закрытия браузера, с ними до указанного срока. Размер одной куки ограничен примерно 4 КБ; - сессия: данные о пользователе лежат на сервере: в памяти, в файлах, в Redis или в базе. Клиенту достаётся только идентификатор, обычно в куке (
JSESSIONID,PHPSESSID), по нему сервер находит запись; - токены: с JWT подписанные данные лежат у клиента, в куке или в
localStorage, а сервер хранит только ключ проверки. Отозвать такой токен до срока сложнее; - Web Storage:
localStorageиsessionStorageтоже на клиенте, но на сервер сами не уходят.sessionStorageк серверной сессии отношения не имеет.
Где смотреть: в DevTools вкладка Application (в Firefox Storage) показывает куки с атрибутами, Network показывает Set-Cookie в ответах. Для API пригодятся Postman, curl, Charles или Fiddler.
Что проверять: у сессионной куки стоят HttpOnly, Secure и SameSite; после логина идентификатор меняется (защита от фиксации сессии); после выхода старый идентификатор сервер отклоняет; сессия истекает по таймауту.
Где спотыкаются
Говорят, что сессия хранится в куке. В куке лежит ключ, а данные на сервере, если это не JWT.
Проверяют выход только по интерфейсу. Браузер удалил куку, но сервер мог сессию не закрыть. Сохраните старое значение и повторите с ним запрос через Postman или curl: правильный ответ 401 или редирект на вход.
Считают, что сессионная кука умирает при закрытии вкладки. Она живёт до закрытия браузера, а восстановление вкладок её ещё и возвращает.