Аннулирование сеанса в FF, Tomcat

Я использую веб-контейнер Tomcat. У меня есть приложение консоли администратора. Когда я нажимаю на выход из системы, атрибут сеанса становится нулевым и недействительным. См. приведенный ниже код в моем файле logout.jsp. После выхода пользователь попадает на страницу входа. В fireFox я нажимаю кнопку «Назад». У меня есть следующие проблемы. Во-первых, я не получаю страницу с истекшим сроком действия, как в IE. Во-вторых, когда я нажимаю на любую ссылку на странице, я проверяю атрибут сеанса, который я сделал нулевым при выходе из системы. Ценность этого — «успех». Я полностью смущен этим поведением. Это проблема с управлением сеансами 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();
  %>

person Sandeep    schedule 28.08.2010    source источник


Ответы (1)


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

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() уже уничтожает все атрибуты.

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

person BalusC    schedule 30.08.2010
comment
Привет BalusC, Спасибо, что поделились своим опытом и добрым советом. Я благодарен вам. - person Sandeep; 07.09.2010