我在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>
当用户单击注销按钮时,我想将他重定向到登录页面并终止当前会话。我已经成功完成了重定向部分,但是我不知道该如何终止会话。请问该怎么做?
为了终止当前会话,您基本上需要调用HttpSession#invalidate()并执行重定向到登录名或主页的操作。该代码应放置在POST请求调用doPost()的Servlet方法中。
HttpSession#invalidate()
doPost()
例如
<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。
onClick
<a>