Quelle est la différence entre les sessions?Abandon() et Session.Clair()

Quelle est la différence entre détruire une session et supprimer ses valeurs? Pouvez-vous donner un exemple qui démontre cela?

j'ai cherché cette question, mais ne saisissez pas la réponse totale. Voici quelques réponses:

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

un ami m'a dit ceci:

Compensation de la session ne sera pas annuler la session, elle existe encore avec le ID identique pour l'utilisateur mais avec les valeurs sont simplement effacées.

abandonner détruira la session complètement, ce qui signifie que vous devez commencer une nouvelle session avant que vous pouvez stockez d'autres valeurs dans la session pour l'utilisateur.

le code ci-dessous fonctionne et ne jette aucune exception.

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

quand vous abandonnez () une Session, vous (ou plutôt l'utilisateur) obtiendra un nouveau SessionId

quand je teste la Session, ça ne change rien quand j'abandonne la session.

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

96
demandé sur Ryan Gates 2009-09-24 12:41:08

10 réponses

Clear - supprime toutes les clés et valeurs de la collection session-state.

Abandonner - supprime tous les objets stockés dans une Session. Si vous n'appelez pas la méthode Abandonner explicitement, le serveur supprime ces objets et détruit la session lors de la session expire.

Il soulève également des événements comme Session_End .

Session.Claire peut être comparé à enlever tous les livres de l'étagère , pendant la Session.Abandon est plus comme jeter l'ensemble de l'étagère .

vous dites:

quand je teste la Session, ça ne change rien quand j'abandonne la session.

ceci est correct pendant que vous le faites dans une seule requête .

Sur la prochaine demande la séance sera différente. Mais l'ID de session peut être réutilisé pour que l'id reste le même.

si vous utilisez Session.Il est clair que vous aurez la même session dans de nombreuses demandes.

généralement, dans la plupart des cas, vous devez utiliser Session.Clair.

Vous pouvez utiliser Session.Abandonner si vous êtes sûr que l'utilisateur va quitter votre site.

retour aux différences:

  1. Abandon soulève une demande de Session_End.
  2. Clear enlève les articles immidiately, Abandon does not.
  3. Abandon libère l'objet SessionState et ses articles afin qu'il puisse ba ordures collectées pour libérer les ressources. Claire continue SessionState et des ressources associées.
130
répondu Dmytrii Nagirniak 2015-12-03 16:05:20

lorsque vous Abandon() une Session, vous (ou plutôt l'utilisateur) obtiendrez un nouveau SessionId (sur la requête suivante). Lorsque vous Clear() une Session, toutes les valeurs stockées sont supprimées, mais le SessionId reste intact.

17
répondu Hans Kesting 2015-12-03 16:06:28

C'est sorte de 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 feu de l'événement de fin de session.

Session.Abandon() N'effacera pas les valeurs de la requête courante. SI une autre page est demandée, les valeurs auront disparu. Cependant, l'abandon va jeter l'événement.

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

7
répondu NRC 2012-11-17 02:12:19

ce code fonctionne et ne jette aucune exception:

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

c'est parce que lorsque la méthode D'Abandon est appelée, l'objet de Session courante est mis en file d'attente pour suppression mais n'est pas réellement supprimé jusqu'à ce que toutes les commandes de script sur la page courante aient é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 D'Abandon mais pas dans les pages Web suivantes.

par exemple, dans le script suivant, la troisième ligne imprime la valeur Mary. C'est parce que L'objet Session n'est pas détruit tant que le serveur n'a pas fini de traiter le script.

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%>

si vous accédez à la variable MyName sur une page Web suivante, elle est vide. Ceci est dû au fait que MyName a été détruit avec L'objet Session précédente lorsque la page contenant l'exemple précédent a été traitée.

de l' MSDN Session.Abandon

4
répondu Seven 2014-12-23 10:58:31

effacer une session supprime les valeurs qui y étaient stockées, mais vous pouvez encore en ajouter de nouvelles. Après avoir détruit la session, vous ne pouvez pas y ajouter de nouvelles valeurs.

3
répondu RaYell 2009-09-24 08:46:22

clair de son supprimez les clés et valeurs de l'état de la session de la collection..

abandon de son supprimer ou supprimé les objets de session de la session..

3
répondu maxy 2009-09-25 10:47:42

L'Existence de sessionid peut causer l'attaque de fixation de session qui est l'un des points dans la conformité PCI. Pour supprimer le sessionid et surmonter l'attaque de fixation de session, lisez cette solution - Comment éviter la vulnérabilité de fixation de Session dans ASP.NET je ne sais pas. .

0
répondu Sheo Narayan 2011-06-09 06:02:10

je pense qu'il serait pratique d'utiliser Session.Clear() plutôt que Session.Abandon() .

parce que les valeurs existent toujours en session après avoir appelé plus tard mais sont supprimées après avoir appelé la première.

0
répondu Pra 2012-10-26 19:30:34
Session.Abandon() 

détruira / tuera toute la session.

Session.Clear()

supprime / efface les données de la session (c'est-à-dire les clés et les valeurs de la session en cours) mais la session sera vivante.

comparer à Session.Abandon () méthode, Session.Clear () ne crée pas la nouvelle session, il rend toutes les variables de la session nulles.

L'ID de Session

restera le même dans les deux cas, tant que le navigateur n'est pas fermé.

Session.RemoveAll()

il supprime toutes les clés et valeurs de la collection session-state.

Session.Remove()

il supprime un élément de la session-collection d'état.

Session.RemoveAt()

il supprime un élément à un index spécifié de la collection session-état.

Session.TimeOut()

cette propriété spécifie le délai attribué à L'objet Session pour l'application. (l'heure sera précisée dans minute.)

si l'utilisateur ne rafraîchit pas ou ne demande pas une page dans le délai imparti, alors la session se termine.

0
répondu Laxmi 2016-09-27 11:11:53
this code works and dont throw any exception:

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

une chose à noter ici cette Session.Effacer supprimer les éléments immédiatement, mais la Session.Abandon marque la session à abandonner à la fin de la présente demande. Cela signifie simplement que supposez que vous avez essayé d'accéder à la valeur en code juste après la session.abandonner la commande a été exécutée, elle sera toujours là. Donc ne pas confondre si votre code ne marche pas même après l'émission de la session.abandonnez la commande et faites immédiatement un peu de logique avec la session.

0
répondu Biki 2016-12-05 06:55:21