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

我工作的Servlet有一个变量session

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

 java.lang.IllegalStateException: getAttribute: Session already invalidated 

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

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

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

代码段:

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

更新:我需要做的就是return;response.sendRedirect("restanes.jsp"); 。 衷心感谢BalusC

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

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

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

你的代码没问题

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

但请确保重定向页面不包含任何会话属性。 来自“restanes.jsp”页面的500内部错误。 解决重定向页面和会话活动。