Почему я не должен уничтожать сеанс http при выходе из системы?
Есть ли веская причина не просто уничтожать HTTP-сессию, например:
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
session.invalidate();
вместо того, чтобы просто деаутентифицировать пользователя и удостовериться, что он очищает данные пользователя от бобов области действия сеанса?
2 ответа
Вы должны сделать оба. Отмена аутентификации пользователя может зависеть от вашей реализации. Если вы обращаетесь к сторонней системе для получения токена безопасности для пользователя, скорее всего, вам придется перезвонить снова, чтобы лишить законной силы токен.
Вы также должны аннулировать HttpSession. При аннулировании сеанса будут освобождены все bean-объекты области действия. Он также освобождает состояния просмотра JSF и деревья компонентов для страниц, посещенных во время сеанса пользователя. Это может привести к тому, что сеанс будет иметь размер и не станет недействительным, и куча будет заполнена сеансами, ожидающими тайм-аут, что отрицательно скажется на пропускной способности сервера.
Кстати, вы можете аннулировать сеанс без необходимости получать HttpSession, например:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
Найдите ответ в документации Oracle:
Метод session.invalidate(), который часто используется для выхода пользователя из системы, только делает недействительным текущий сеанс для пользователя - информация аутентификации пользователя по-прежнему остается действительной и сохраняется в контексте сервера или виртуального хоста. Если на сервере или виртуальном хосте размещено только одно веб-приложение, метод session.invalidate() фактически отключает пользователя.
http://docs.oracle.com/cd/E11035_01/wls100/webapp/sessions.html