如何有效关闭/销毁/终止会话?

问题描述 投票:0回答:1

我有一个 servlet,我使用 POST 验证登录并使用 GET 验证注销。因此,我希望当我单击注销按钮时,我无法返回到上一页,因为会话已终止。但它并没有发生。当我点击注销按钮时,我仍然可以返回到上一页。

所以这是我在 servlet 中注销的代码

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String action = request.getParameter("action");
        if ("logout".equals(action)) {
            HttpSession session = request.getSession();
            session.invalidate();
            response.sendRedirect("loginpage.jsp");
        }
    }

注销按钮代码

<li class="nav-item"><a class="nav-link" href="logout?action=logout">Logout</a></li>

我重定向到登录页面,但是当我在浏览器中“单击返回”时,即使我检查会话,我仍然可以返回

这是我在每个页面上放置的用于验证会话的代码

<%
    HttpSession ses = request.getSession(false);
    if (ses == null || ses.getAttribute("name") == null) {
        response.sendRedirect("login-form.jsp");
        return;
    }
%>
java session servlets netbeans web-applications
1个回答
0
投票

代码看起来是正确的。尝试禁用浏览器缓存,以便使用后退按钮的请求可能会使用它们。对于 Firefox:开发者工具 -> 网络 -> 禁用缓存。

或者尝试通过服务器响应禁用缓存

如果您通过 POST 发送登录信息,则不包括“重新发送新会话的请求”。如果还是不行,请尝试将资源放入 WEB-INF 中,这样您只能从 servlet 通过调度程序访问。

© www.soinside.com 2019 - 2024. All rights reserved.