如何在Java Servlet中有效地破坏'session'?

Sus*_*ire 19 java session servlets destroy

我正在使用的Servlet有一个变量session.

我试过session.invalidate();,这似乎已经破坏了会话但是当我像这样重定向时response.sendRedirect("restanes.jsp");,它给了我HTTP Status 500这行错误:

java.lang.IllegalStateException: getAttribute: Session already invalidated
Run Code Online (Sandbox Code Playgroud)

这是因为我试图破坏会话.

但为什么页面无法重定向?在其他地方的同一页面上,我已成功重定向.

如何成功销毁会话和重定向?

代码段:

if(request.getParameter("logout") != null ){  
        session.invalidate();
        response.sendRedirect("restanes.jsp");
}
Run Code Online (Sandbox Code Playgroud)

更新:我需要做的就是return;追求response.sendRedirect("restanes.jsp");.真诚的感谢BalusC.

Bal*_*usC 42

您需要在发送重定向后从方法返回.

if (request.getParameter("logout") != null) {  
    session.invalidate();
    response.sendRedirect("restanes.jsp");
    return; // <--- Here.
}
Run Code Online (Sandbox Code Playgroud)

否则代码将继续运行并session.getAttribute()在块中进一步向下触发某个方法,从而导致此异常.至少,这是迄今为止所描述的问题的最可能原因,并且基于这是一个非常常见的启动器错误的事实.另见例如这个答案.

  • 别客气.请注意,这同样适用于PHP.你需要在`header('Location:foo.php')之后放一个`exit;```````````````````````````````````````````````````````````````````````````````无论如何忽略不必要的检索HTML). (2认同)