2010-12-09 3 views
1

Je suis en train d'essayer de réparer mon code de délai d'attente de session, et j'ai rencontré un problème intéressant. J'ai pris les recommandations here et here pour supposer que j'ai atteint un délai d'attente lorsque Session.IsNewSession est vrai et qu'un cookie de session existe déjà. Selon plusieurs messages, ce sont des signes qu'un délai d'attente s'est produit. Toutes ces vérifications que j'ai sur ma page d'accueil avant que l'utilisateur se connecte (ils sont redirigés vers cette page dans les situations de timeout et de déconnexion).ASP.NET: Response.Redirect() met-il fin à la session en cours?

Supposons que tout est correct. Lorsque l'utilisateur clique sur LogOut dans l'application, je lance mon code de base de données nécessaire pour mettre fin à la session, alors je lance ceci:

//abandon session 
Global.Session.Abandon(); 

//redirect 
Response.Redirect(FormsAuthentication.LoginUrl, false); 

Ce que je remarque tout de suite dans ma page d'accueil, quand j'effectuer les contrôles d'expiration de session, était que Session.IsNewSession était vrai, menant finalement à la logique qui pense qu'il y a un délai d'attente de session. Évidemment, ce n'était pas le cas; l'utilisateur a simplement cliqué sur Déconnexion. En mettant un point d'arrêt dans Session_End dans mon fichier global, j'ai pu voir que Session_End est déclenché après avoir fait l'instruction Response.Redirect() lorsque l'utilisateur se déconnecte. Donc, je me demande si c'est supposé se produire? À l'origine, je pensais que cela avait quelque chose à voir avec Session.Abandon(), mais cela ne semble pas provoquer le lancement de Session_End. Des idées?

Merci.

Répondre

2

L'événement Session_End est déclenché uniquement une fois la requête en cours terminée. La redirection est la fin de votre requête, l'événement se déclenche à ce moment-là. Une redirection par elle-même ne met pas fin à la session en cours.

+0

Et je suppose que la session s'est terminée pendant cette requête parce que je dis Session.Abandon()? –

+0

Oui, vous le forcer à se terminer avec l'appel Abandon –

Questions connexes