Аннулирование сессии в FF, Tomcat - PullRequest
3 голосов
/ 28 августа 2010

Я использую веб-контейнер Tomcat. У меня реализовано приложение консоли администратора. Когда я нажимаю на выход из системы, атрибут сеанса обнуляется и становится недействительным, смотрите код ниже в моем файле logout.jsp. После выхода из системы пользователь попадает на страницу входа. В FireFox я нажимаю кнопку назад, у меня есть следующие вопросы. Сначала я не получаю страницу с истекшим сроком действия, как в IE Во-вторых, когда я нажимаю на любую ссылку на странице, я проверяю атрибут sessioon, который я сделал нулевым при выходе из системы. Ценность этого - «успех». Я полностью запутался с этим поведением. Это проблема с управлением сессиями Firefox или Tomcat.

Я уверен, что мне нужно больше знаний, чтобы понять это поведение. Благодарим Вас за помощь, дайте мне знать, что здесь происходит ...

<%@ page session="false" %>
<%
response.setHeader("cache-control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",-1);

%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <% 
    HttpSession session = request.getSession(false);
    System.out.println("session"+session);
    session.setAttribute("loginStatus",null);
    session.invalidate();
  %>

1 Ответ

4 голосов
/ 30 августа 2010

Заголовки неполные.Вам нужен следующий набор заголовков:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

Особенно запись must-revalidate исправляет эту конкретную проблему FF.

См. Также


Не имеет отношения к реальной проблеме, у меня есть несколько комментариевоб этом куске кода:

  • Вы должны предпочесть UTF-8, а не ISO-8859-1, чтобы получить мировое господство .
  • Необработанный код Java в JSPстраница плохая практика .Заголовки ответа должны быть установлены в Filter, а выход из системы должен происходить (косвенно) в Servlet.
  • Вызов getSession(false) с false может вернуть сеанс null, который вПоворот может привести к NullPointerException при определенных обстоятельствах.Избавьтесь от false или хотя бы добавьте нулевую проверку.
  • Установка атрибута на null непосредственно перед вызовом invalidate() не нужна.Вызов invalidate() уже уничтожает все атрибуты.

Надеюсь, вы чему-то научитесь из этого.

...