120

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

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

4

4 に答える 4

175

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

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

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

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

于 2008-12-07T08:25:48.250 に答える
14

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

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

于 2011-10-21T13:12:59.107 に答える
3

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

于 2012-05-15T10:14:00.840 に答える
0

私はこの問題を抱えていて両方を試しましたが、「pageEditState」のようながらくたを削除することで解決しなければなりませんでしたが、ユーザー情報を削除しないでください。

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
于 2008-12-07T14:34:08.927 に答える