45 votes

Session.Clear() vs. Session.RemoveAll()

Y a-t-il une différence entre Session.Clear() et Session.RemoveAll()?

Les descriptions et les pages de documentation semblent dire exactement la même chose, mais je suppose qu'il doit y avoir une raison pour créer deux fonctions, ai-je raison?

128voto

Darin Dimitrov Points 528142

Ils sont absolument les mêmes. RemoveAll appelle Clear en interne. De Reflector :

public sealed class HttpSessionState : ICollection, IEnumerable
{
    ...

    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    public void RemoveAll()
    {
        this.Clear();
    }

    ...
}

6 votes

Super réponse; très définitive. Je me demande pourquoi MS a inclus les deux méthodes quand l'une appelle simplement l'autre? Quoi qu'il en soit, cela a répondu à ma question et je vais simplement utiliser Clear() maintenant car c'est plus facile à taper et plus direct.

-7voto

Etienne Points 1864

Pour être en sécurité, vous pouvez toujours les appeler tous de cette manière....

Session.Clear()
Session.Abandon()
Session.RemoveAll()

Exemple en VB.NET, je suis sûr que tout ce que vous avez à faire est de placer le ; à la fin de chacun d'eux. Cela a fonctionné pour moi car j'avais des problèmes avec ma Session auparavant où elles n'étaient pas supprimées.

21 votes

Note : Clear et RemoveAll suppriment simplement toutes les entrées (l'utilisateur conserve le même SessionId) ; Abandonne met fin à la session entière (l'utilisateur obtient un nouveau SessionId).

17 votes

La réponse de Darin Dimitrov aurait dû être marquée comme la réponse, car elle répond véritablement à ce qui a été demandé. Cela ne répond pas réellement à la question, qui demande la différence entre les deux méthodes, et en fait donne une mauvaise réponse puisqu'elle suggère d'appeler Clear et RemoveAll alors que les deux sont fonctionnellement identiques et, par conséquent, redondants.

2 votes

De plus, .Abandon() ne prend effet qu'à la fin de la requête, donc appeler Session.Abandon() puis Session.Add("foo", bar) entraînerait une session abandonnée. Ne pas appeler chaque méthode à chaque fois car cela fonctionne la plupart du temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X