单击注销按钮终止会话并重定向到登录页面
Posted
技术标签:
【中文标题】单击注销按钮终止会话并重定向到登录页面【英文标题】:Kill session and redirect to login page on click of logout button 【发布时间】:2012-11-22 08:00:55 【问题描述】:我在 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>
当用户单击注销按钮时,我想将他重定向到登录页面并终止当前会话。我已经成功完成了重定向部分,但我不知道如何终止会话。请问这个怎么做?
【问题讨论】:
尝试使用session.invalidate()
?此外,在这个主题上使用谷歌搜索将为您提供很多很好的解决方案。因为仅仅invalidating
会话是不够的。您还需要设置一些cache-headers
(我不记得具体是哪个),以避免用户在注销后使用返回按钮返回到最后一页。
Prevent user from going back to the previous secured page after logout的可能重复
【参考方案1】:
试试这个杀死会话
HttpSession newsession = request.getSession(false);
if (newsession != null)
newsession.invalidate();
response.sendRedirect("../index.jsp");
【讨论】:
【参考方案2】:你应该看看 HttpSession 的invalidate() 方法。可以通过 HttpServletRequest getSession() 方法检索会话。
您还应该查看 Expires、Cache-Control、Pragma http 标头,如:Prevent user from going back to the previous secured page after logout。
【讨论】:
【参考方案3】:为了终止当前会话,您基本上需要调用HttpSession#invalidate()
并执行重定向到登录或主页。这段代码应该放在由 POST 请求调用的 servlet 的 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 filter 的一个地方执行此工作。 JSP文件中的Java代码尽量avoided。
此外,当最终用户使用浏览器的后退按钮返回历史记录时,还有另一个潜在问题。默认情况下,浏览器将缓存所有响应,因此后退按钮可能会显示浏览器缓存中的页面,而不是直接从服务器请求全新的页面。为了解决这个问题,请参阅这个相关问题Prevent user from seeing previously visited secured page after logout
最后但同样重要的是,您有一些非常奇怪的 HTML。带有onClick
的按钮进行导航?用户和 SEO 如何不友好。请改用普通的<a>
链接。对于按钮的外观,请添加一些 CSS。
【讨论】:
以上是关于单击注销按钮终止会话并重定向到登录页面的主要内容,如果未能解决你的问题,请参考以下文章