Как эффективно уничтожить "сеанс" в Java Servlet?
Сервлет, с которым я работаю, имеет переменную session
.
Я пробовал session.invalidate();
, похоже, что он уничтожил сеанс, но когда я делаю такой переадресации response.sendRedirect("restanes.jsp");
, он дает мне HTTP Status 500
ошибку с этой строкой:
java.lang.IllegalStateException: getAttribute: Session already invalidated
Ожидается, так как я пытался уничтожить сеанс.
Но почему страница не может перенаправлять? На той же странице в другом месте я перенаправлен успешно.
Как я могу успешно уничтожить сеанс и перенаправить?
Фрагмент кода:
if(request.getParameter("logout") != null ){
session.invalidate();
response.sendRedirect("restanes.jsp");
}
Обновление:
Все, что мне нужно было, это return;
после response.sendRedirect("restanes.jsp");
. Искренняя благодарность BalusC
.
Ответы
Ответ 1
Вам нужно вернуться из метода после отправки перенаправления.
if (request.getParameter("logout") != null) {
session.invalidate();
response.sendRedirect("restanes.jsp");
return; // <--- Here.
}
В противном случае код будет продолжать выполняться и удалять некоторый метод session.getAttribute()
далее в блоке, вызывая именно это исключение. По крайней мере, это самая вероятная причина проблемы, описанная до сих пор, и основанная на том, что это довольно распространенная ошибка стартера. См. Также, например. этот ответ.
Ответ 2
Ваш код в порядке
if(request.getParameter("logout") != null )
{
session.invalidate();
response.sendRedirect("restanes.jsp");
}
но убедитесь, что страница перенаправления не содержит атрибутов сеанса. 500 внутренняя ошибка, поступающая со страницы "restanes.jsp".
работать с перенаправленной страницей и активностью сеанса.