質問#1
私はいつ使うべきか知りたい:
Session.Abandon() //トレース中および呼び出し後にこれを使用すると、セッションにまだ値があることがわかります。
そして、いつ使用することになっていますか:
特定の各メソッドをいつ使用する必要がありますか?
セッションがページ読み込みでnullに等しくないかどうかを確認します。セッションがnullに等しい場合、セッションをクリアしてログインページにリダイレクトしたいですか?
このようなものを使用する必要があります:
private void initSession()
{
Session.Clear();
Session.Abandon();
Response.Redirect("LoginPage.aspx");
}
ASP.NETでは、いつSession.Abandon()ではなくSession.Clear()を使用すべきですか?
Session.Abandon()はセッションを破棄し、Session_OnEndイベントがトリガーされます。
Session.Clear()は、オブジェクトからすべての値(コンテンツ)を削除するだけです。同じキーを持つセッションはまだ生きています。
したがって、Session.Abandon()を使用すると、その特定のセッションが失われ、ユーザーは新しいセッションキーを取得します。たとえば、ユーザーがログアウトするときに使用できます。
ユーザーを同じセッションに残したい場合(たとえば、ユーザーに再ログインさせたくない場合)、セッション固有のデータをすべてリセットしたい場合は、Session.Clear()を使用します。
Session.Abandon()とSession.Clear()の違いは何ですか
クリア-セッション状態コレクションからすべてのキーと値を削除します。
放棄-セッションに保存されているすべてのオブジェクトを削除します。 Abandonメソッドを明示的に呼び出さない場合、サーバーはこれらのオブジェクトを削除し、セッションがタイムアウトしたときにセッションを破棄します。また、Session_Endなどのイベントを発生させます。
Session.Clearは棚からすべての本を削除することと比較できますが、Session.Abandonは棚全体を捨てるようなものです。
...
通常、ほとんどの場合、Session.Clearを使用する必要があります。ユーザーがサイトを離れることに確信がある場合は、Session.Abandonを使用できます。
違いに戻りましょう:
- 放棄はSession_End要求を発生させます。
- Clearはアイテムをすぐに削除しますが、Abandonは削除しません。
- AbandonはSessionStateオブジェクトとそのアイテムを解放して、ガベージコレクションを行えるようにします。
- Clearは、SessionStateとそれに関連付けられたリソースを保持します。
Session.Clear()またはSession.Abandon()?
セッションを終了するのではなく、セッション内のすべてのキーをクリアしてセッションを再初期化する場合は、Session.Clear()を使用します。
Session.Clear()は、Global.asaxファイルのSession_Endイベントハンドラーを実行しません。
ただし、一方でSession.Abandon()はセッションを完全に削除し、Session_Endイベントハンドラーを実行します。
Session.Clear()は、本棚から本を削除するようなものです
Session.Abandon()は本棚自体を投げるようなものです。
質問
ページの読み込みでnullと等しくない場合、いくつかのセッションをチェックします。それらのいずれかがnullに等しい場合、すべてのセッションをクリアしてログインページにリダイレクトしたいですか?
回答
ユーザーに再度ログインさせるには、Session.Abandonを使用します。
このトピックに非常に関連するこの記事をネットで見つけました。ここに投稿します。
もう1つの大きな違いは、Abandonはアイテムをすぐに削除しないが、クリーンアップするとセッションアイテムをループ処理し、特別に処理する必要があるSTA COMオブジェクトをチェックすることです。 そしてこれは問題になる可能性があります。
高負荷の場合、2つ(またはそれ以上)のリクエストが同じセッション(同じセッションCookieを持つ2つのリクエスト)でサーバーに送信される可能性があります。実行はシリアル化されますが、Abandonはアイテムを同期的にクリアせず、フラグを設定するため、両方のリクエストが実行され、両方のリクエストがワークアイテムをスケジュールして「後で」セッションをクリアできます。これらの作業項目は両方とも同時に実行でき、両方ともセッションオブジェクトをチェックし、両方ともオブジェクトの配列を消去します。リストを反復処理して変更する2つのことがあるとどうなりますか?ブーム!また、これはqueueuserworkitemコールバックで発生し、try/catchでは実行されないため(MSに感謝)、アプリドメイン全体がダウンします。行ったことがある。