Gymterview
junior

Что такое сессия?

Сессия (session) — механизм сохранения состояния взаимодействия пользователя с сервером на протяжении нескольких HTTP-запросов, компенсирующий stateless-природу протокола HTTP.

Аналогия из жизни: сессия — это как номерок в гардеробе. Вы сдали пальто (данные), получили номерок (session ID). При следующем обращении предъявляете номерок, и гардеробщик (сервер) находит ваше пальто (данные).

Сессия начинается при первом запросе пользователя и завершается при явном выходе (logout), по истечении тайм-аута бездействия (обычно 30 минут) или при обрыве связи. Данные сессии хранятся на сервере, а клиент хранит только идентификатор сессии (session ID), обычно в cookie.

Как работает сессия

  1. Клиент отправляет первый запрос на сервер
  2. Сервер создаёт объект сессии и генерирует уникальный session ID
  3. Session ID отправляется клиенту в cookie (JSESSIONID в Java)
  4. При каждом следующем запросе браузер автоматически отправляет session ID
  5. Сервер находит объект сессии по ID и восстанавливает контекст пользователя

Где хранятся данные сессии

Хранилище Плюсы Минусы
In-memory (JVM Heap) Быстро, просто Теряется при рестарте, не масштабируется
Redis / Memcached Масштабируется, переживает рестарт Сетевые задержки
БД Персистентность Медленнее всего
JWT-токен (клиент) Stateless, масштабируется Нельзя отозвать до истечения, размер

В Spring-приложениях сессиями управляет HttpSession, а для распределённых систем — Spring Session с Redis-бэкендом.

На собеседовании: объясните связь между сессией и cookies: cookie хранит только session ID, а данные — на сервере. Частый вопрос: «Что будет, если пользователь отключил cookies?» — session ID можно передавать через URL-rewriting, но это менее безопасно.