14

Java サーブレットとリクエストを処理する最良の方法に関する一般的な質問。リモート サーバー リクエストから doGet メソッドをヒットした場合:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
  ....
  <do work here>
  ....
  kill(request);
}

private void kill(HttpServletRequest request) {
//How do I kill the user session here?
}

最後にリクエストを処理し、リクエスタへの出力を生成した後、基本的に彼らのセッションを「強制終了」したいと考えています。現在、そのセッションは長引くため、メモリを消費します。その後、最大数に達すると、他のすべての呼び出しがタイムアウトになります。

request オブジェクトを使用して HttpSession オブジェクトを作成しようとしましたが、同じ結果が得られました。

HttpSession session = request.getSession();
session.invalidate();
4

5 に答える 5

26
HttpSession session = request.getSession(false);
if (session != null) {
    session.invalidate();
}

ドキュメントで提案されているように、適切な方法です。クライアントが新しいリクエストを送信すると、新しいセッションが作成されます。

あなたのセッションはまだメモリを消費していると言いました。セッションでこれらのオブジェクトへの他の参照はありますか?

また、以下も参照してください:サーブレット セッションの動作と Session.invalidate

于 2012-04-05T21:39:29.767 に答える
5

を使用してセッションから属性を削除できます

session.removeAttribute("attribute name");
于 2012-04-06T12:01:47.677 に答える
2

試してみてください

session = request.getSession(false); // so if no session is active no session is created
if (session != null)
  session.setMaxInactiveInterval(1); // so it expires immediatly
于 2012-04-05T21:27:13.800 に答える
1

セッションの動作、つまり複数のリクエスト間で状態を保持したくない場合。なぜセッションを作成/使用したいのですか。セッションを作成しないか、セッションに何も保存しません。

コードがセッションを使用していないことを確認するには、getSession()メソッドをオーバーライドするリクエスト ラッパーを記述します。

于 2012-04-06T05:26:45.650 に答える
0

web.xml でタイムアウト期間を設定する

于 2019-11-10T12:16:53.250 に答える