C # Clear Session

Question 1

Je veux savoir quand je suis censé utiliser:

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

Et quand dois-je utiliser:

Session.Clear ()

Quand dois-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 le chargement de la page. Si la session est égale à null, je veux effacer la session et redirect vers la page de connexion?

Devrais-je utiliser quelque chose comme ça:

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

Dans 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’object. La session avec la même clé est toujours active.

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 rest dans la même session (si vous ne voulez 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 ()

Effacer – Supprime toutes les clés et valeurs de la collection d’état de session.

Abandon – supprime tous les objects stockés dans une session. Si vous n’appelez pas explicitement la méthode Abandon, le serveur supprime ces objects 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 ressemble plus à 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 certain que l’utilisateur va quitter votre site.

Donc revenons aux différences:

  • L’abandon déclenche une requête Session_End.
  • Effacer supprime immédiatement les objects, Abandon ne le fait pas.
  • Abandon libère l’object SessionState et ses éléments afin qu’il puisse être collecté.
  • Clear permet de conserver SessionState et les ressources associées.

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

Vous utilisez Session.Clear () lorsque vous ne souhaitez pas terminer la session mais effacez simplement toutes les clés de la session et réinitialisez 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 le gestionnaire d’événements Session_End.

Session.Clear () est comme retirer des livres de l’étagère

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

Question

Je vérifie sur certaines sessions sinon égale null dans le chargement de la page. Si l’un d’eux est nul, je veux effacer toutes les sessions et redirect vers la page de connexion?

Répondre

Si vous souhaitez que l’utilisateur se connecte à nouveau, utilisez Session.Abandon.

J’ai 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

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

Sous une 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 que les deux requêtes soient exécutées et que les deux demandes planifient un élément de travail pour effacer la session “plus tard”. Ces deux éléments de travail peuvent alors être exécutés en même temps, et les deux vérifient les objects de session, et tous deux effacent le tableau d’objects, et que se passe-t-il lorsque deux choses sont itérées sur une liste et modifiées? Boom! Et comme cela se produit dans un rappel queueuserworkitem et que cela n’est PAS fait dans un try / catch (merci MS), cela fera tomber tout votre domaine d’application. Été là.