Как выйти из сеанса с помощью invalidate() в сервлете

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        HttpSession session = request.getSession();
        if(session != null)
        {
            try
            {
                response.setHeader("Cache-Control","no-cache"); //Forces caches to obtain a new copy of the page from the origin server
                response.setHeader("Cache-Control","no-store"); //Directs caches not to store the page under any circumstance
                response.setDateHeader("Expires", 0); //Causes the proxy cache to see the page as "stale"
                response.setHeader("Pragma","no-cache"); //HTTP 1.0 backward compatibility
                session.setAttribute("admin_name",null);
                session.invalidate();
                response.sendRedirect("login.jsp");
            }
            catch(Exception e)
            {
                System.out.println(e.getMessage());
                System.out.println(e);
            }

        }
        else
        {


        }
    }

Это мой сервлет. Я собираюсь выйти из сеанса, который я создал, используя имя admin_name. когда я выхожу из сеанса, он успешно попадает на страницу входа. но когда я нажимаю кнопку «Назад», он переходит на предыдущую страницу. Я не понял, почему это происходит, даже если я аннулирую этот сеанс. но когда я обновлю эту страницу, она снова попадет на страницу входа.

Вот код, который я использовал на странице jsp.

<%
        String name = null;
        if (session.getAttribute("admin_name") == null) {
            response.sendRedirect("login.jsp");
        } else {
            name = (String) session.getAttribute("admin_name");
        }
    %>

person Shan    schedule 02.05.2014    source источник
comment
Вам не нужно удалять вещи из сеанса, который вы собираетесь аннулировать. Он станет недостижимым и (а) поэтому подлежит GC и (б) атрибуты также станут недостижимыми и недоступными.   -  person user207421    schedule 02.05.2014


Ответы (2)


Сессия invalidated сразу после вызова метода .invalidate

Из документов,

invalidate

void invalidate()
Invalidates this session then unbinds any objects bound to it.

Из вашего вопроса

I didn't understood why these happen even if i invalidate that session. 

but when i refresh that page it will again hit the login page.

Это связано с тем, что страница загружается из кеша браузера, даже если она переходит на предыдущую страницу, вы не можете отправить запрос с загруженной страницы

Обновить

Проверьте это Как очистить кеш браузера с помощью java

Надеюсь это поможет!!

person Santhosh    schedule 02.05.2014
comment
Я сделал то же самое. см. мой обновленный вопрос. но опять та же проблема. скажи мне, где я не прав - person Shan; 02.05.2014
comment
см. эту тему - person Santhosh; 02.05.2014

В этом случае вы успешно завершили сеанс. Это средство в вашем браузере, которое, когда вы нажимаете кнопку «Назад», показывает перехваченную копию веб-страницы. Поэтому, если вы нажмете «Обновить страницу», вы больше не увидите эту страницу. В этом случае ваша веб-страница не будет обработана, поскольку срок действия сеанса истек, и вы снова перейдете на страницу входа.

person Aditya Ekbote    schedule 02.05.2014
comment
так что мне нужно сделать, чтобы избежать этого улова. - person Shan; 02.05.2014
comment
@Shan Проверьте мой обновленный ответ - person Santhosh; 02.05.2014