Какую область видимости (scope) имеет контекст пользователя в типичном stateful веб-приложении?

«Какую область видимости (scope) имеет контекст пользователя в типичном stateful веб-приложении?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В классическом stateful веб-приложении контекст пользователя (его данные между запросами) хранится в сессии (HttpSession). Это область видимости session scope.

Ключевые особенности session scope:

  • Данные хранятся на сервере и привязываются к уникальному идентификатору сессии (обычно в cookie JSESSIONID).
  • Доступны в рамках всех запросов одного пользователя в течение времени жизни сессии.
  • Сессия создается при первом обращении и может быть инвалидирована по таймауту или явно.

Пример на Java Servlet:

// Сохранение данных в сессию
HttpSession session = request.getSession(); // Получить или создать сессию
session.setAttribute("currentUser", userObject);

// Получение данных из сессии в другом запросе
User user = (User) session.getAttribute("currentUser");
Другие области видимости в веб-приложении: Scope Время жизни Типичное использование
Request Один HTTP-запрос/ответ Параметры запроса, атрибуты для передачи в JSP.
Session Сессия пользователя Корзина покупок, данные для аутентификации.
Application Время работы приложения Глобальный кэш, общие конфигурации (ServletContext).

Важно: В современных stateless архитектурах (REST API с JWT) контекст пользователя передается в каждом запросе через токен в заголовке Authorization, и сервер не хранит состояние сессии.