web-dev-qa-db-ja.com

Javaサーブレットで「セッション」を効果的に破棄する方法は?

私が作業しているサーブレットには、変数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");
}
_

更新:必要なことは、response.sendRedirect("restanes.jsp");の後に_return;_だけでした。 BalusCに心から感謝します。

18
Sushan Ghimire

リダイレクトを送信した後、メソッドから戻る必要があります。

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

それ以外の場合、コードは実行を継続し、ブロックのさらに下のsession.getAttribute()メソッドをヒットして、まさにこの例外を引き起こします。少なくとも、これがこれまでに説明した問題の最も可能性の高い原因であり、これはかなり一般的なスターターの間違いであるという事実に基づいています。例もご覧ください。 この答え

41
BalusC

あなたのコードは大丈夫です

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

ただし、リダイレクトページにセッション属性が含まれていないことを確認してください。 「restanes.jsp」ページからの500内部エラー。リダイレクトされたページとセッションアクティビティを処理します。

0
Pushpendra