ASP.NETでは、Session.Abandon()ではなくSession.Clear()をいつ使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/347377

質問

Session.Clear()とSession.Abandon()の両方がセッション変数を取り除きます。私が理解しているように、Abandon()は現在のセッションを終了し、新しいセッションを作成させて、EndイベントとStartイベントを発生させます。

ユーザーのログアウトなど、ほとんどの場合にAbandon()を呼び出すことが望ましいようです。代わりにClear()を使用するシナリオはありますか?パフォーマンスに大きな違いはありますか?

役に立ちましたか?

解決

Session.Abandon() セッションを破棄すると、 Session_OnEndイベントがトリガーされます。

Session.Clear()は、オブジェクトからすべての値を削除(コンテンツ)するだけです。同じキーを持つセッションはまだ生きています。

したがって、<=>を使用すると、その特定のセッションが失われ、ユーザーは新しいセッションキーを取得します。たとえば、ユーザーがログアウトするときに使用できます。

<=>を使用して、ユーザーを同じセッションに残したい場合(たとえば、ユーザーに再ログインさせたくない場合)、すべてのセッション固有のデータをリセットします。

他のヒント

ユーザーがログアウトするときにのみSession.Clear()を使用すると、セキュリティホールが発生する可能性があります。 Webサーバーに関する限り、セッションはまだ有効です。その場合、セッションIDをスニッフィングして取得し、そのセッションをハイジャックするのはかなり簡単なことです。

このため、ユーザーをログアウトするときは、セッションが破棄され、新しいセッションが作成されるようにSession.Abandon()を使用する方がより安全で賢明です(ログアウトUIページは新しいセッションでは、新しいセッションにはユーザーの詳細は含まれず、新しいセッションをハイジャックすることは新しいセッションを持つことに等しいため、ミュートになります。

Session.Abondon()Session.Clear()を使用する実際の例がどこにあるのかまだわかりません。

理解できます...ユーザーがログアウトリンクをクリックして、それらを<!> quot;ログアウトしました<!> quot; page ....ブラウザセッションはまだ継続していますが、セッションに保存されている情報を削除する必要があります。セッションを放棄した場合、<!> quot; you've logout <!> quot;の新しいセッションがすぐに作成されます。ページ。

Session.Abandonは上記のようにセッションを破棄するため、誰かをログアウトするときにこれを使用する必要があります。 Session.Clearの適切な使用は、eコマースWebサイトの買い物かごに使用すると思います。そうすることで、ユーザーをログアウトせずにバスケットがクリアされます。

この問題が発生し、両方を試しましたが、<!> quot; pageEditState <!> quot;のようながらくたを削除する必要がありましたが、ユーザー情報を削除せずに再度検索する必要がありました。

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top