如何在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内部错误。 解决重定向页面和会话活动。