105 votes

Quelle est la différence entre Session.Abandon() et Session.Clear() ?

Quelle est la différence entre la destruction d'une session et la suppression de ses valeurs ? Pouvez-vous fournir un exemple qui le démontre ?

J'ai cherché cette question, mais je ne saisis pas la réponse totale. Certaines réponses sont :

  • Session.Abandon() détruit la session
  • Session.Clear() supprime simplement toutes les valeurs

Un ami m'a dit ceci :

L'effacement de la session n'annulera pas la session, elle existe toujours avec le même ID pour l'utilisateur mais avec les valeurs simplement effacées.

Abandonner détruira la session complètement, ce qui signifie que vous devez commencer une nouvelle session avant de pouvoir stocker d'autres valeurs dans la session pour cet utilisateur.

Le code ci-dessous fonctionne et ne lève aucune exception.

Session.Abandon();
Session["tempKey1"] = "tempValue1";

Lorsque vous abandonnez () une session, vous (ou plutôt l'utilisateur) obtiendrez un nouveau SessionId

Lorsque je teste la session, il n'y a pas de changement lorsque j'abandonne la session.

Je trouve juste une différence : session.Abandon() soulève Session_End événement

143voto

Dmytrii Nagirniak Points 10979

Clair - Supprime toutes les clés et valeurs de la collection d'états de session.

Abandonnez - supprime tous les objets stockés dans une session. Si vous n'appelez pas explicitement la méthode Abandon, le serveur supprime ces objets et détruit la session lorsque celle-ci arrive à expiration.
Elle soulève également des événements tels que Fin de la session .

Session.Clear peut être comparé à retirer tous les livres de l'étagère tandis que Session.Abandon est plutôt du type jeter l'étagère entière .

Vous dites :

Lorsque je teste la session, il n'y a pas de changement lorsque j'abandonne la session.

C'est correct pendant que vous le faites dans le cadre d'une seule demande .
Lors de la prochaine demande, la session sera différente. Mais le l'ID de session peut être réutilisé pour que l'identifiant reste le même.

Si vous utilisez Session.Clear, vous aurez la même session dans plusieurs requêtes.

En général, dans la plupart des cas, vous devez utiliser Session.Clear.
Vous pouvez utiliser Session.Abandon si vous êtes sûr que l'utilisateur va quitter votre site.

Revenons-en donc aux différences :

  1. Abandon de la demande de Session_End.
  2. Effacer retire les articles immédiatement, Abandonner ne le fait pas.
  3. Abandon libère l'objet SessionState et ses éléments afin qu'il puisse être récupéré pour libérer les ressources. Clear conserve l'objet SessionState et les ressources qui lui sont associées.

20voto

Hans Kesting Points 17043

Quand vous Abandon() une session, vous (ou plutôt l'utilisateur) obtiendrez un nouveau SessionId (lors de la prochaine demande). Lorsque vous Clear() une session, toutes les valeurs stockées sont supprimées, mais le SessionId reste intact.

9voto

NRC Points 41

C'est trier Les différentes réponses ci-dessus ont couvert une grande partie de ce problème, mais la première fois que j'ai lu cet article, j'ai manqué un fait important, ce qui a conduit à un bug mineur dans mon code...

Session.Clear() effacera les valeurs de toutes les clés mais ne provoquera pas l'événement de fin de session.

Session.Abandon() n'effacera PAS les valeurs de la requête en cours. SI une autre page est demandée, les valeurs seront effacées pour celle-ci. Cependant, l'abandon lancera l'événement.

Donc, dans mon cas (et peut-être dans le vôtre ?), j'avais besoin de Clear() suivi par Abandon() .

3voto

RaYell Points 26761

L'effacement d'une session supprime les valeurs qui y étaient stockées, mais vous pouvez toujours y ajouter de nouvelles valeurs. Après la destruction d'une session, vous ne pouvez plus y ajouter de nouvelles valeurs.

3voto

maxy Points 152

Clear-its supprimer la clé ou les valeurs de la collection d'état de session

abandon-its supprime ou supprime les objets de session de la session

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