Question

Quelle est la différence entre la destruction d'une session et la suppression de ses valeurs? Pouvez-vous s'il vous plaît donner un exemple démontrant cela?

Je recherchais cette question, mais ne saisissent pas la réponse totale. Quelques réponses sont:

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

Un ami m'a dit ceci:

  

Effacer la session ne détruira pas   la session, il existe encore la   même ID pour l'utilisateur, mais avec le   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 davantage les valeurs de la session   pour cet utilisateur.

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

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

Lorsque vous abandonnerai () une session, vous (ou   plutôt l'utilisateur) va obtenir un nouveau   SessionId

Quand je teste session, il ne fait aucun changement quand j'Abandonner la séance.

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

Était-ce utile?

La solution

Effacer - supprime tous les clés et des valeurs de la collection d'état de session.

Abandonner - supprime tous les objets stockés dans une session. Si vous ne l'appelez pas la méthode Abandonner explicitement, le serveur supprime ces objets et détruit la session lorsque les temps de session sur.
Il soulève également des événements comme Session_End .

Session.clear peut être comparé à retirer tous les livres de l'étagère , tandis que Session.Abandon est plus comme jeter l'ensemble du plateau .

Vous dites:

  

Quand je teste session, il ne fait aucun changement quand j'Abandonner la séance.

Ceci est correct pendant que vous faites au sein d'une seule demande .
À la demande de la session suivante sera différente. Mais le peut être réutilisé afin que l'id reste le même.

Si vous utilisez Session.clear vous aurez la même session de nombreuses demandes.

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 donc aux différences:

  1. Abandonner la demande de relances.
  2. Effacer supprime les éléments immidiately, Abandonner ne fonctionne pas.
  3. Abandonner libère l'objet SessionState et ses éléments pour qu'il puisse les ordures collectées ba pour libérer les ressources. Effacer maintient SessionState et les ressources qui y sont associées.

Autres conseils

Lorsque vous Abandon() une session, vous (ou plutôt l'utilisateur) obtiendrez une nouvelle SessionId (à la demande suivante). Lorsque vous Clear() une session, toutes les valeurs stockées sont supprimées, mais le SessionId reste intact.

est trier de couvert par les différentes réponses ci-dessus, mais la première fois que je lis cet article, je manqué un fait important, qui a conduit à un bug mineur dans mon code ...

Session.Clear() écraseront les valeurs de toutes les clés mais ne causera l'événement de fin de session pour le feu.

Session.Abandon() ne supprimera pas les valeurs à la demande actuelle. Si une autre page est demandée, les valeurs seront partis pour que celui-ci. Cependant, abandonner jetteront l'événement.

Alors, dans mon cas (et peut-être dans le vôtre?), Je avais besoin Clear() suivi par Abandon().

  

ce code fonctionne et ne pas jeter une exception:

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

Il est parce que quand la méthode Abandonner est appelée, l'objet de la session en cours est mis en attente pour la suppression, mais ne sont pas réellement supprimés jusqu'à ce que toutes les commandes de script sur la page en cours ont été traitées. Cela signifie que vous pouvez accéder à des variables stockées dans l'objet de session sur la même page que l'appel à la méthode Abandonner mais pas dans toutes les pages Web suivantes.

Par exemple, dans le script suivant, la troisième ligne imprime la valeur Marie. En effet, l'objet de la session ne soit pas détruit jusqu'à ce que le serveur a terminé le traitement du script.

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

Si vous accédez à la variable NomUtilisateur sur une page Web suivante, il est vide. En effet, MonNom a été détruit avec l'objet précédent de session lorsque la page contenant l'exemple précédent a terminé le traitement.

MSDN Session.Abandon

Effacement d'une session supprime les valeurs qui ont été stockés là-bas, mais vous pouvez toujours ajouter de nouvelles là. Après la destruction de la session, vous ne pouvez pas ajouter de nouvelles valeurs là.

clear-clé ou la supprimer les valeurs de la collection d'état de session ..

abandonner-ses supprimer ou supprimés objets de session de la session ..

Session.Abandon() 

va détruire / tuer toute la session.

Session.Clear()

supprime / efface les données de session (à savoir les clés et les valeurs de la session en cours), mais la session sera en vie.

Comparer à la méthode Session.Abandon (), Session.clear () ne crée pas la nouvelle session, il suffit de faire toutes les variables de la session NULL.

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

Session.RemoveAll()

Il supprime toutes les clés et les valeurs de la collection d'état de session.

Session.Remove()

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

Session.RemoveAt()

Il supprime un élément à un index spécifié de la collection d'état de session.

Session.TimeOut()

Cette propriété spécifie la période de temporisation attribuée à l'objet de session pour l'application. (Le temps sera spécifiée en minutes).

Si l'utilisateur ne met pas à jour ou de demander une page dans le délai de temporisation, la session se termine.

L'existence de sessionid peut provoquer l'attaque de fixation de session qui est l'un des points de conformité PCI. Pour retirer le sessionid et surmonter l'attaque de fixation de session, lire cette solution - Comment éviter la vulnérabilité de fixation de session dans ASP.NET? .

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

Parce que les valeurs existent encore en session après avoir appelé plus tard, mais sont retirés après avoir appelé l'ancien.

this code works and dont throw any exception:

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

Une chose à noter ici que Session.clear supprimer des éléments immédiatement, mais Session.Abandon marque la session à abandonner à la fin de la demande actuelle. Cela signifie simplement que supposons que vous avez essayé d'accéder à la valeur dans le code juste après la commande Session.Abandon a été exécuté, il sera toujours là. Donc, ne vous trompez pas si votre code est tout simplement pas fonctionner même après l'émission commande Session.Abandon et de faire immédiatement une certaine logique à la session.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top