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

时间:2012-12-20 00:55:19

标签: java session servlets destroy

我正在使用的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

2 个答案:

答案 0 :(得分:39)

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

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

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

答案 1 :(得分:0)

您的代码没问题

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

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