В каких случаях закрывается HTTP-сессия в Java?

«В каких случаях закрывается HTTP-сессия в Java?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP-сессия в Java (объект HttpSession) закрывается в следующих случаях:

  1. Таймаут неактивности — при отсутствии запросов от клиента в течение заданного интервала.

    // Установка таймаута в 10 минут (в секундах)
    session.setMaxInactiveInterval(10 * 60);
  2. Явная инвалидация — вызов метода invalidate().

    session.invalidate(); // Все атрибуты сессии удаляются
  3. Завершение работы приложения (деплоя) — при остановке сервлет-контейнера или перезагрузке веб-приложения.

  4. Программное управление временем жизни — если задан абсолютный срок жизни (через setMaxInactiveInterval).

Почему это важно: После закрытия сессии все её атрибуты (session.getAttribute()) безвозвратно теряются. Для сохранения данных между сессиями используйте постоянное хранилище (БД, кэш).