Как проверить/аннулировать сеансы jsp/servlets?

Я открыл сеанс в своем сервлете, когда пользователь выполнил успешный вход в систему:

HttpSession session = request.getSession(true);
session.setAttribute("name", name);

то я написал в logout.jsp для завершения сеанса:

<%session.invalidate();%>

Чтобы проверить, действительно ли сеанс, я делаю следующее:

HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");

Но он не работает, я получаю сессию действительной даже после session.invalidate. Кто-нибудь понимает, где я делаю неправильно?

Ответ 1

вам следует вызвать session.getSession(false) - который возвращает null, если текущий сеанс отсутствует.

в соответствии с docs

HttpSession#getSession(boolean create) - create - true для создания нового сеанса для этого запроса, если это необходимо; false для возврата null, если нет текущей сессии.

Таким образом, правильный способ проверки значения сеанса будет -

HttpSession session = request.getSession(false);
if(session!=null)
  session.setAttribute("name", name);

и как только вы аннулируете сеанс -

HttpSession session = request.getSession(false);
if(session!=null)
session.invalidate();

Ответ 2

Проверка сеанса

HttpSession session = request.getSession(true);
session.setAttribute("name", name);

Чтобы сделать это недействительным, вам необходимо выполнить

session.removeAttribute("name");
session.invalidate();

Но вам нужно помнить о том, что объект может стать недействительным, но это не означает, что он будет очищен немедленно, даже после его недействительности после того, как все его атрибуты исчезнут, возможно, что объект sesssion будет повторно использован, я получил тот же идентификатор пользователя и время создания.