Что такое сессия
Сессия (Session) — это серверный механизм хранения состояния клиента между несколькими HTTP-запросами. Поскольку HTTP — stateless протокол, сессия решает проблему «запоминания» пользователя: его аутентификации, корзины покупок, настроек и других данных.
Аналогия из жизни: сессия — это номерок в гардеробе. Клиент получает номерок (session ID) при первом визите, и при каждом следующем обращении предъявляет его, чтобы получить доступ к своим вещам (данным сессии). Когда клиент уходит — номерок аннулируется.
Как работает HttpSession
- Клиент отправляет первый запрос
- Сервер создаёт объект
HttpSessionс уникальным ID - ID отправляется клиенту через cookie
JSESSIONID - Клиент возвращает
JSESSIONIDс каждым запросом - Сервер по ID находит объект
HttpSessionс данными клиента
Сессия имеет таймаут неактивности (по умолчанию 30 минут в Tomcat). После таймаута сессия инвалидируется контейнером, и все её атрибуты удаляются из памяти.
На собеседовании: частая ошибка — не упомянуть проблему серверных сессий в распределённых системах. При нескольких экземплярах приложения нужна либо sticky session, либо распределённое хранилище сессий (Redis), либо stateless-подход (JWT).