Quelle est la différence entre détruire une session et supprimer ses valeurs? Pouvez-vous donner un exemple pour illustrer cela?
J'ai cherché cette question, mais je ne saisis pas la réponse totale. Certaines réponses sont:
Session.Abandon()
détruit la sessionSession.Clear()
supprime simplement toutes les valeurs
Un ami m'a dit ceci:
La suppression 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.
L'abandon détruira complètement la session, 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, cela n'apporte aucun changement lorsque j'abandonne la session.
Je trouve juste une différence:
session.Abandon()
soulève l' Session_End
événement
la source
Réponses:
Clear - Supprime toutes les clés et valeurs de la collection d'état de session.
Abandon - 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 la session expire.
Il déclenche également des événements tels que Session_End .
Session.Clear peut être comparé à la suppression de tous les livres de l'étagère , tandis que Session.Abandon revient plus à jeter l'étagère entière .
Vous dites:
Ceci est correct tant que vous le faites dans une seule demande .
A la prochaine demande, la session sera différente. Mais l' ID de session peut être réutilisé afin que l'ID reste le même.
Si vous utilisez Session.Clear, vous aurez la même session dans de nombreuses requêtes.
Généralement, 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 donc aux différences:
la source
Session.Clear
peut être comparé au retrait immédiat de tous les livres de l'étagère , alors que celaSession.Abandon
revient plutôt à dire "jetez toute l'étagère et faites-moi savoir quand vous avez terminé ".Lorsque vous effectuez
Abandon()
une session, vous (ou plutôt l'utilisateur) obtiendrez un nouveau SessionId (à la prochaine requête). Lorsque vous effectuezClear()
une session, toutes les valeurs stockées sont supprimées, mais l'identifiant de session reste intact.la source
C'est en quelque sorte couvert par les différentes réponses ci-dessus, mais la première fois que j'ai lu cet article, j'ai manqué un fait important, qui a conduit à un bug mineur dans mon code ...
Session.Clear()
effacera les valeurs de toutes les clés mais ne provoquera PAS le déclenchement de l'événement de fin de session.Session.Abandon()
n'effacera PAS les valeurs de la demande en cours. SI une autre page est demandée, les valeurs seront perdues pour celle-là. Cependant, l'abandon lancera l'événement.Donc, dans mon cas (et peut-être dans le vôtre?), Il me fallait
Clear()
suivi parAbandon()
.la source
C'est parce que lorsque la méthode Abandon est appelée, l'objet Session en cours est mis en file d'attente pour suppression mais n'est pas réellement supprimé tant que toutes les commandes de script de la page actuelle n'ont pas été traitées. Cela signifie que vous pouvez accéder aux variables stockées dans l'objet Session sur la même page que l'appel à la méthode Abandon mais pas dans les pages Web suivantes.
Par exemple, dans le script suivant, la troisième ligne imprime la valeur Mary. Cela est dû au fait que l'objet Session n'est pas détruit tant que le serveur n'a pas terminé le traitement du script.
Si vous accédez à la variable MyName sur une page Web suivante, elle est vide. Cela est dû au fait que MyName a été détruit avec l'objet Session précédent lorsque la page contenant l'exemple précédent a terminé le traitement.
depuis MSDN Session.Abandon
la source
La suppression d'une session supprime les valeurs qui y étaient stockées, mais vous pouvez toujours en ajouter de nouvelles. Après avoir détruit la session, vous ne pouvez pas y ajouter de nouvelles valeurs.
la source
clear-its remove key ou values from session state collection ..
abandon-son supprimer ou supprimer des objets de session de la session.
la source
détruira / tuera toute la session.
supprime / efface les données de session (c'est-à-dire les clés et les valeurs de la session en cours) mais la session sera active.
Comparé à la méthode Session.Abandon (), Session.Clear () ne crée pas la nouvelle session, il rend simplement toutes les variables de la session NULL.
L'ID de session restera le même dans les deux cas, tant que le navigateur n'est pas fermé.
Il supprime toutes les clés et valeurs de la collection d'état de session.
Il supprime un élément de la collection d'état de session.
Il supprime un élément à un index spécifié de la collection d'état de session.
Cette propriété spécifie le délai d'expiration attribué à l'objet Session pour l'application. (l'heure sera spécifiée en minutes).
Si l'utilisateur n'actualise pas ou ne demande pas de page dans le délai d'expiration, la session se termine.
la source
L'existence de sessionid peut provoquer l'attaque de fixation de session qui est l'un des points de conformité PCI. Pour supprimer l'identifiant de session et surmonter l'attaque de fixation de session, lisez cette solution - Comment éviter la vulnérabilité de fixation de session dans ASP.NET? .
la source
Je pense qu'il serait pratique d'utiliser
Session.Clear()
plutôt que d'utiliserSession.Abandon()
.Parce que les valeurs existent toujours en session après un appel ultérieur, mais sont supprimées après avoir appelé la première.
la source
Une chose à noter ici que Session.Clear supprime les éléments immédiatement mais Session.Abandon marque la session à abandonner à la fin de la requête en cours. Cela signifie simplement que supposons que vous ayez essayé d'accéder à la valeur dans le code juste après l'exécution de la commande session.abandon, elle sera toujours là. Donc, ne soyez pas confus si votre code ne fonctionne tout simplement pas même après avoir émis la commande session.abandon et avoir immédiatement fait une logique avec la session.
la source