web-dev-qa-db-fra.com

Optimisation MVC pour Session.Clear (), Session.Abandon (), Session.RemoveAll ()?

J'utilise quelques sessions qui devraient être terminées lorsque l'utilisateur a terminé. Je suis tombé sur ces 3 tueurs de session. Quel est le meilleur moment pour les utiliser, car j'utilise les sessions plus souvent qu'autrement. De plus, y a-t-il une autre fin de session dont je ne suis pas au courant?

29
MrM

Session.Clear et Session.RemoveAll sont identiques; ce dernier appelle simplement le premier. Ils suppriment immédiatement tous les éléments stockés dans la session, mais la session elle-même survit. Session_OnEnd ne se déclenche pas.

Session.Abandon ne supprime pas immédiatement les valeurs, il marque simplement la session à abandonner à la fin de la requête en cours. Vous pouvez continuer à lire les valeurs pour le reste de la demande. Si vous écrivez à la session plus tard dans la demande, la nouvelle valeur sera discrètement ignorée à la fin de la demande sans avertissement. Session_OnEnd se déclenche à la fin de la demande, pas lorsque Abandon est appelé.

57
stevemegson

Session.Clear ne tue pas une session, il efface toutes les valeurs. Session.Abandon tue la session.

Il semble que la plupart de ces problèmes soient traités ici: Dans ASP.NET, quand dois-je utiliser Session.Clear () plutôt que Session.Abandon ()?

13
Dave Swersky

Un peu tard ici, mais je voudrais partager la preuve que @stevemegson est correct en tant que Session.RemoveAll appelle en interne Session.Clear

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

Et donc il n'y a exactement aucune différence entre

Et session.Abandon appels

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

qui font essentiellement :) ..

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