繁体   English   中英

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

[英]Kill session and redirect to login page on click of logout button

我在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请求调用的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过滤器中的单个位置执行此作业。 应尽可能避免 JSP文件中的Java代码。

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

最后但同样重要的是,你有一些非常奇怪的HTML。 使用onClick进行导航的按钮? 用户和SEO如何不友好。 请改用普通的<a>链接。 对于按钮look'n'feel,扔进一些CSS。

你应该看一下HttpSession的invalidate()方法。 可以通过HttpServletRequest getSession()方法检索会话。

您还应该查看Expires,Cache-Control,Pragma http标头,如下所示: 防止用户在注销后返回到先前的安全页面

试试这个来杀死会话

HttpSession newsession = request.getSession(false);
    if (newsession != null) 
    {
         newsession.invalidate();

    }

   response.sendRedirect("../index.jsp");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM