我在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() http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#invalidate%28%29并执行重定向到登录或主页。这段代码应该放在doPost()
的方法servlet https://stackoverflow.com/tags/servlets/info它由 POST 请求调用。
E.g.
<form action="${pageContext.request.contextPath}/logout" method="post">
<input type="submit" value="Logout" />
</form>
with
@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 页面上复制粘贴相同的代码。您应该在一个地方执行这项工作小服务程序过滤器 https://stackoverflow.com/tags/servlet-filters/info。 JSP 文件中的 Java 代码应该是avoided https://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files越多越好。
此外,当最终用户使用浏览器的后退按钮返回历史记录时,还存在另一个潜在问题。默认情况下,浏览器将缓存所有响应,因此后退按钮可能会显示浏览器缓存中的页面,而不是直接从服务器请求全新的页面。为了解决这个问题,请参阅此相关问题防止用户在注销后看到以前访问过的安全页面 https://stackoverflow.com/questions/4194207/prevent-user-from-going-back-to-the-previous-secured-page-after-logout
最后但并非最不重要的一点是,您遇到了一些非常奇怪的 HTML。按钮与onClick
导航?用户和SEO多么不友好。使用正常<a>
链接代替。对于按钮的外观,添加一些 CSS。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)