10

我在 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>

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

4

3 回答 3

22

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

例如

<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。

于 2012-12-04T16:30:24.223 回答
2

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

您还应该查看 Expires、Cache-Control、Pragma http 标头,如:防止用户在注销后返回上一个安全页面

于 2012-12-04T16:23:37.263 回答
0

试试这个杀死会话

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

    }

   response.sendRedirect("../index.jsp");
于 2014-07-22T09:58:14.260 回答