小编典典

单击注销按钮,终止会话并重定向到登录页面

jsp

我在JSP中有以下代码:

<%
    if(session.getAttribute("Username") == null || session.getAttribute("Username") == "_INVALID_")
    {
        response.sendRedirect("LoginPage.html");
    }
%>

<form>
    <input type="button" value="Change Account Details" onClick="location.href='ChangeDetails.jsp'">
    <br></br>
    <input type="button" value="Add Customers" onClick="location.href='AddCustomers.jsp'">
    <br></br>
    <input type="button" value="Manage Flights" onClick="location.href='ManageFlights.jsp'">
    <br></br>
    <input type="button" value="Book Flights" onClick="location.href='BookFlights.jsp'">
    <br></br>
    <input type="button" value="Log Out" onClick="location.href='LoginPage.html'">
</form>

当用户单击注销按钮时,我想将他重定向到登录页面并终止当前会话。我已经成功完成了重定向部分,但是我不知道该如何终止会话。请问该怎么做?


阅读 263

收藏
2020-06-08

共1个答案

小编典典

为了终止当前会话,您基本上需要调用HttpSession#invalidate()并执行重定向到登录名或主页的操作。该代码应放置在POST请求调用doPost()的Servlet方法中。

例如

<form action="${pageContext.request.contextPath}/logout" method="post">
    <input type="submit" value="Logout" />
</form>

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().invalidate();
        response.sendRedirect(request.getContextPath() + "/LoginPage.html");
    }

}

具体问题 无关
,您的用户名检查代码不在正确的位置。您不应该在每个JSP页面上复制粘贴相同的代码。您应该在servlet过滤器中的单个位置执行此作业。应尽可能避免 JSP文件中的Java代码。

此外,当最终用户使用浏览器的“后退”按钮导航回历史记录时,还有另一个潜在的问题。默认情况下,浏览器将缓存所有响应,因此后退按钮可能会显示浏览器缓存中的页面,而不是从服务器请求全新的请求。为了解决此问题,请参阅此相关问题,防止用户注销后看到以前访问的安全页面

最后但并非最不重要的一点是,您那里有一些非常奇怪的HTML。带有onClick导航按钮?用户和SEO如何不友好。改用普通<a>链接。对于按钮外观,请添加一些CSS。

2020-06-08