web-dev-qa-db-ja.com

Session.Clear()、Session.Abandon()、Session.RemoveAll()のMVC最適化?

ユーザーが終了したら終了する必要があるいくつかのセッションを使用しています。私はこれらの3つのセッションキラーに偶然出会いました。セッションを使用する時間が長くなるため、これらを使用するのに最適な時期はいつですか。また、知らない他のセッションの終了はありますか?

29
MrM

Session.ClearおよびSession.RemoveAllは同一です。後者は前者を呼び出すだけです。彼らはすぐにセッションに保存されているすべてのアイテムを削除しますが、セッション自体は存続します。 Session_OnEndは発生しません。

Session.Abandonは、実際に値をすぐにクリアするのではなく、現在のリクエストの最後で破棄されるセッションをマークするだけです。リクエストの残りの値を読み続けることができます。リクエストの後半でセッションに書き込む場合、新しい値は警告なしでリクエストの最後に静かに破棄されます。 Session_OnEndは、Abandonが呼び出されたときではなく、リクエストの最後に発生します。

57
stevemegson

Session.Clearはセッションを強制終了せず、すべての値をクリアします。 Session.Abandonは実際にセッションを強制終了します。

これの大部分はここで対処されているようです: ASP.NETでは、Session.Abandon()ではなくSession.Clear()をいつ使用する必要がありますか?

13
Dave Swersky

ここでは少し遅れますが、Session.RemoveAllが内部でSession.Clearを呼び出すため、@ stevemegsonが正しいという証明を共有したいと思います

public void Clear()
        {
            this._container.Clear();
        }
        public void RemoveAll()
        {
            this.Clear();
        }

そして、まったく違いはありません

そしてsession.Abandon呼び出し

public void Abandon()
        {
            this._container.Abandon();
        }

基本的には:)。

public void Abandon()
{
    this._abandon = true;
}
1
vikas