50 votes

C# Effacer la session

Question n° 1

Je veux savoir quand je suis censé l'utiliser :

Session.Abandon() // Lorsque je l'utilise pendant le traçage et après l'avoir appelé, je constate que la session a toujours une valeur.

Et quand suis-je censé utiliser :

Session.Clear()

Quand dois-je utiliser chaque méthode spécifique ?


  • En général ?
  • Dans mon cas spécifique ?

Je vérifie si la session n'est pas égale à null dans le chargement de la page. Si la session est égale à null, je veux effacer la session et rediriger vers la page de connexion ?

Je devrais utiliser quelque chose comme ça :

private void initSession()
{
    Session.Clear();
    Session.Abandon();
    Response.Redirect("LoginPage.aspx");
}

94voto

NgM Points 2956

En ASP.NET, quand dois-je utiliser Session.Clear() plutôt que Session.Abandon() ?

Session.Abandon() détruit la session et l'événement Session_OnEnd est déclenché.

Session.Clear() supprime simplement toutes les valeurs (contenu) de l'objet. La session session avec la même clé est toujours vivante.

Par conséquent, si vous utilisez Session.Abandon(), vous vous perdez cette session spécifique et l'utilisateur l'utilisateur recevra une nouvelle clé de session. Vous pourriez l'utiliser par exemple lorsque l'utilisateur se déconnecte.

Utilisez Session.Clear(), si vous voulez que l'utilisateur reste dans la même session (si vous ne souhaitez pas qu'il se reconnecte par exemple) et réinitialiser toutes ses données données spécifiques à la session.

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

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

Abandon - supprime tous les objets stockés dans une session. Si vous n'appelez pas appelez pas explicitement la méthode Abandon, le serveur supprime ces objets et détruit la session lorsque celle-ci session. Il déclenche également des événements tels que Session_End.

Session.Clear peut être comparé à retirer tous les livres de l'étagère, tandis que Session.Abandon est plus proche de jeter l'étagère entière.

...

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 l'utilisateur va quitter votre site.

Revenons-en donc aux différences :

  • Abandon de la demande de Session_End.
  • Effacer supprime les éléments immédiatement, Abandonner ne le fait pas.
  • Abandon libère l'objet SessionState et ses éléments pour qu'ils puissent être ramassés collectés.
  • Efface le SessionState et les ressources qui lui sont associées.

Session.Clear() ou Session.Abandon() ?

Vous utilisez Session.Clear() lorsque vous ne souhaitez pas ne voulez pas terminer la session mais plutôt simplement effacer toutes les clés de la session et réinitialiser la session.

Session.Clear() ne provoquera pas l'événement Session_End dans votre fichier fichier Global.asax.

Mais d'un autre côté Session.Abandon() supprimera complètement la session et exécutera Eventhandler Session_End.

Session.Clear() est comme enlever des livres de l'étagère à livres

Session.Abandon() revient à jeter l'étagère elle-même. bibliothèque elle-même.

Question

Je vérifie que certaines sessions ne sont pas nulles lors du chargement de la page. Si l'une d'entre elles est nulle, je veux effacer toutes les sessions et rediriger vers la page de connexion.

Réponse :

Si vous voulez que l'utilisateur se reconnecte, utilisez Session.Abandon.

3voto

Walden Leverich Points 2856

L'autre grande différence est qu'Abandon ne supprime pas immédiatement les éléments, mais lorsqu'il procède au nettoyage, il effectue une boucle sur les éléments de la session pour vérifier s'il existe des objets COM STA qu'il doit traiter spécialement. Et cela peut être un problème.

En cas de charge élevée, il est possible que deux demandes (ou plus) parviennent au serveur pour la même session (c'est-à-dire deux demandes avec le même cookie de session). Leur exécution sera sérialisée, mais comme Abandon n'efface pas les éléments de manière synchrone mais définit plutôt un drapeau, il est possible que les deux demandes soient exécutées et que les deux demandes planifient un élément de travail pour effacer la session "plus tard". Ces deux tâches peuvent alors s'exécuter en même temps, et toutes deux vérifient les objets de session, et toutes deux vident le tableau d'objets, et que se passe-t-il lorsque deux choses itèrent sur une liste et la modifient ? Boom ! Et comme cela se produit dans un callback queueuserworkitem et n'est PAS fait dans un try/catch (merci MS), cela fera tomber tout votre domaine d'application. Je suis passé par là.

3voto

Saanch Points 1124

J'ai trouvé cet article sur le net, très pertinent pour ce sujet. Je le poste donc ici.

Internes ASP.NET - Effacer les variables de session ASP.NET

0voto

theLaw Points 309

Je voudrais ajouter une astuce à cette question, pour l'appel .Abandon(), vous devez définir dans la configuration web (sous ) le mode="InProc".

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