web-dev-qa-db-fra.com

C # Clear Session

Question n ° 1

Je veux savoir quand suis-je censé utiliser:

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

Et quand suis-je censé utiliser:

Session.Clear ()

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


  • En général?
  • Dans mon cas particulier?

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

Devrais-je utiliser quelque chose comme ceci:

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

Dans ASP.NET, quand devrais-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 avec la même clé est toujours en cours.

Donc, si vous utilisez Session.Abandon (), vous perdez cette session spécifique et l'utilisateur obtiendra une nouvelle clé de session. Vous pouvez l'utiliser par exemple lorsque l'utilisateur se déconnecte.

Utilisez Session.Clear () si vous souhaitez que l'utilisateur reste dans la même session (si vous ne souhaitez pas qu'il se reconnecte par exemple) et réinitialisez toutes ses 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'é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 celle-ci arrive à expiration. Il soulève é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 est plutôt comme de jeter toute l'étagère.

...

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:

  • Abandon déclenche la requête Session_End.
  • Effacer supprime les objets immédiatement, pas Abandon.
  • Abandon libère l'objet SessionState et ses éléments afin qu'il puisse être nettoyé.
  • Clear conserve SessionState et les ressources qui lui sont associées.

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

Vous utilisez Session.Clear () lorsque vous ne souhaitez pas mettre fin à la session, mais simplement effacer toutes les clés de la session et réinitialiser la session.

Session.Clear () ne provoque pas l'exécution du gestionnaire d'événements Session_End dans votre fichier Global.asax.

Mais d'autre part, Session.Abandon () supprimera complètement la session et exécutera Session_End Eventhandler.

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

Session.Abandon () est comme jeter la bibliothèque elle-même.

Question

Je vérifie certaines sessions sinon égal à null dans le chargement de la page. si l'un d'entre eux est égal à null, je souhaite effacer toutes les sessions et rediriger les utilisateurs vers la page de connexion?

Réponse

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

94
Mike Veigel

Trouvé cet article sur le net, très pertinent pour ce sujet. Donc poster ici.

ASP.NET Internals - Effacement des variables de session ASP.NET

3
Saanch

L’autre grande différence est que Abandon ne supprime pas les éléments immédiatement, mais lorsqu’il effectue un nettoyage, il effectue une boucle sur les éléments de session pour rechercher les objets STA COM qu’il doit gérer spécialement. Et cela peut être un problème.

Sous 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 indicateur, il est possible d'exécuter les deux demandes et les deux demandes de planifier un élément de travail pour effacer la session "plus tard". Ces deux éléments de travail peuvent ensuite être exécutés en même temps. Ils vérifient les objets de session et effacent le tableau d'objets. Que se passe-t-il lorsque deux éléments parcourent une liste et la modifient? Boom! Et comme cela se produit dans un rappel de queueuserworkitem et que cela ne se fait pas dans un try/catch (merci MS), cela réduira tout votre domaine d'application. Été là.

3
Walden Leverich