質問

セッションの破棄とその値の削除の違いは何ですか?これを示す例を教えてください。

この質問を検索しましたが、完全な答えはわかりません。いくつかの答えは次のとおりです。

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

友人は私にこう言いました。

セッションのクリアはセッションを設定することはありませんが、ユーザーの同じIDで存在しますが、値は単にクリアされています。

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

以下のコードは機能し、例外はスローされません。

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

あなたがセッションを放棄する()とき、あなた(またはむしろユーザー)が新しいセッションを取得します

セッションをテストするときに、セッションを放棄しても何も変化しません。

違いが 1 つだけ見つかりました。session.Abandon() 上げる Session_End イベント

役に立ちましたか?

解決

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

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

Session.Clear は次のものと比較できます。 棚からすべての本を取り除く, 一方、Session.Abandon はより似ています。 棚ごと捨てる.

あなたは言う:

セッションをテストするときに、セッションを放棄しても何も変化しません。

あなたがそれをしている間はこれが正しいです 1 回のリクエスト内のみ.
次のリクエストではセッションが異なります。しかし セッションIDは再利用可能 IDは同じままになるようにします。

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

一般に、ほとんどの場合、Session.Clear を使用する必要があります。
ユーザーがサイトから離れることが確実な場合は、Session.Abandon を使用できます。

違いに戻ります。

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

他のヒント

あなたがセッションをAbandon()すると

、あなた(または、むしろユーザー)が(次のリクエストで)新しいのSessionIdを取得します。 あなたがセッションをClear()すると、保存されているすべての値が削除されますが、のSessionIdはそのままとどまります。

... のソートがの上のさまざまな応答によってカバーのですが、私はこの記事を読んで初めて、私は自分のコードにマイナーなバグにつながった重要な事実を、逃しました>

Session.Clear()は、すべてのキーの値をクリアしますが、セッション終了イベントを発生することはありません。

Session.Abandon()は、現在のリクエストに応じて値をクリアしません。別のページが要求された場合、値は、そのいずれかに消えてしまいます。しかし、イベントがスローされます放棄ます。

だから、私の場合は(そしておそらくあなたでは?)、私はClear()続いAbandon()を必要としてます。

  

このコードは動作し、任意の例外をスローいけない。

Session.Abandon();  
Session["tempKey1"] = "tempValue1";
放棄メソッドが呼び出されたときに、現在のSessionオブジェクトが削除のためにキューに登録されているが、スクリプトのすべてが処理された現在のページにコマンドまで実際には削除されていないため、

それはです。これは、あなたが放棄方法にではなく、後続のWebページでの呼び出しと同じページにSessionオブジェクトに格納された変数にアクセスできることを意味します。

例えば、以下のスクリプトでは、第3行目は値メアリーを印刷します。サーバーは、スクリプトの処理を完了するまで、Sessionオブジェクトが破壊されていないためです。

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%>
あなたは、その後のWebページ上の変数MYNAMEにアクセスする場合は、

、それが空です。前の例を含むページの処理が終了したら、MYNAMEが前のセッションオブジェクトに破壊されたためである。

MSDN Session.Abandonするから

セッションをクリアすると、そこに格納された値を削除しますが、あなたはまだそこに新しいものを追加することができます。セッションを破棄した後、あなたはそこに新しい値を追加することはできません。

クリアそのセッション状態コレクションから削除キーまたは値..

放棄-そのセッションから削除するか、削除されたセッションオブジェクトを..

Session.Abandon() 

セッション全体を殺す/破壊されます。

Session.Clear()

削除/セッションデータをクリアする(現在のセッションから、すなわちキーと値)が、セッションが生きているであろう。

Session.Abandonと比較()メソッド、Session.Clear()新しいセッションを作成しません、それだけでNULLにセッション内のすべての変数を作成します。

セッションIDは限りブラウザが閉じられていないとして、例の両方で同じままになります。

Session.RemoveAll()

これは、セッション状態のコレクションからすべてのキーと値を削除します。

Session.Remove()

これは、セッション状態のコレクションから項目を削除します。

Session.RemoveAt()

これは、セッション状態のコレクションから指定したインデックスにある項目を削除します。

Session.TimeOut()

このプロパティは、アプリケーションのためのSessionオブジェクトに割り当てられたタイムアウト時間を指定します。 (時間は分単位で指定します)。

ユーザーがリフレッシュしたり、タイムアウト期間内にページを要求していない場合、セッションは終了します。

セッションIDの存在は、PCIコンプライアンスのポイントの一つであるセッション固定攻撃を引き起こす可能性があります。セッションIDを削除し、セッション固定攻撃を克服するために、このソリューションを読んで - <のhref = "http://www.dotnetfunda.com/articles/article1395-how-to-avoid-the-session-fixation-vulnerability-in-をASPNET-.aspxの」REL = "nofollowを"> ASP.NETでセッション固定の脆弱性を回避する方法ですかます。

私はかなりSession.Clear()を使用するよりもSession.Abandon()を使用するのに便利だと思います。

の値は、まだ後で呼び出した後のセッションで存在するが、前者を呼び出した後に除去されているので。

this code works and dont throw any exception:

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

Session.Clearはすぐに項目を削除したがSession.Abandonは、現在のリクエストの最後で放棄するセッションをマークすることを、ここでもう一つ注意すべき。それは単にあなたがsession.abandonコマンドが実行された直後、それはまだそこになりますコードの値にアクセスしようとしていることを意味します。あなたのコードだけでも、session.abandonコマンドを発行し、すぐにセッションでいくつかのロジックを実行した後に動作しないのであれば混乱はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top