1. ホーム
  2. asp.net

[解決済み] Session.Abandon()とSession.Clear()の違いは何ですか?

2022-09-13 21:03:22

質問

セッションを破棄することと、その値を削除することの違いは何でしょうか。これを実演する例を提供してもらえますか。

私はこの質問を検索しましたが、完全な答えを把握していません。いくつかの回答があります。

  • Session.Abandon() セッションを破棄する
  • Session.Clear() はすべての値を削除します

友人から聞いた話です。

セッションをクリアしても、セッションは解除されません。 セッションはまだ存在しています。 そのユーザーの同じIDで存在します。 値は単にクリアされるだけです。

放棄は、セッションを完全に破壊します。 完全に破壊します。 新しいセッションを開始する必要があります。 セッションにそれ以上の値を保存する前に に値を保存する前に、新しいセッションを開始する必要があることを意味します。

以下のコードは動作し、例外もスローされません。

Session.Abandon();
Session["tempKey1"] = "tempValue1";

セッションをAbandon()すると、あなた(もしくは というよりユーザー)は新しい セッションID

Sessionをテストしたところ、セッションを放棄しても何も変化がありません。

ただ、1つだけ違いがあります。 session.Abandon() 昇給 Session_End イベント

どのように解決するのですか?

クリア - セッションステートコレクションからすべてのキーと値を削除します。

放棄する - は、Session に保存されているすべてのオブジェクトを削除します。Abandonメソッドを明示的に呼び出さない場合、サーバーはこれらのオブジェクトを削除し、セッションがタイムアウトしたときにセッションを破棄します。

また、次のようなイベントを発生させます。 Session_End .

Session.Clearは、次のように比較できます。 本棚からすべての本を取り除く であるのに対し、Session.Abandonはより 棚を全部捨てる .

と言うんですね。

セッションをテストしたところ、セッションを放棄しても何の変化もありません。

している間はこれで正しいです 一回のリクエストで .

次のリクエストでは、セッションは異なるものになります。しかし セッション ID は再利用可能です。 を再利用して、ID が同じになるようにします。

Session.Clearを使用すると、多くのリクエストで同じセッションを持つことができます。

一般的に、ほとんどの場合、Session.Clearを使用する必要があります。

ユーザーがサイトを離れることが確実な場合は、Session.Abandonを使用することができます。

では、違いに戻ります。

  1. Session_End リクエストを放棄します。
  2. Clear はアイテムを即座に削除しますが、Abandon は削除しません。
  3. AbandonはSessionStateオブジェクトとそのアイテムを解放し、リソースを解放するためにガベージコレクションを行うことができます。Clear は、SessionState とそれに関連付けられたリソースを保持します。