2010-01-08 5 views
24

J'ai besoin d'accéder aux variables de session sur l'événement Session_End dans global.asax.cs, mais HttpContext.Current est null, donc aucune des variables de session n'est accessible.variables de session asp.net sur Session_End

a) Puis-je accéder à la session utilisateur en quelque sorte différemment, ou

b) Y at-il un autre événement saillir avant Session_End, je pourrais accéder aux variables de session d'un utilisateur?

Répondre

41

HttpContext.Current n'est pas disponible dans Session_End, mais vous pouvez accéder directement à l'instance de session avec this.Session.

+2

Oui. System.Web.SessionState.HttpSessionState est celui que je devrais utiliser à la place de HttpContext.Current. Thanx –

+0

Vraiment aider plein, merci. – Bharat

+0

vraiment utile après vu http://stackoverflow.com/questions/12294532/asp-net-values-of-session-variables-in-session-end-event cela je doute pourquoi il donne null. et vérifiez que j'ai utilisé HttpContext.Current (y – MSTdev

-1

Sauf si vous utilisez Session_End dans le but spécifique de prendre des mesures lorsqu'une session expire, il n'est pas recommandé de s'appuyer sur Session_End.

Je ne crois pas qu'il existe un moyen fiable de capturer la fin de la session d'un utilisateur (par exemple, quand ils ferment le navigateur).

+2

Ce n'est pas nécessairement vrai. Si vous utilisez des sessions InProc, lorsqu'une session n'a pas eu d'activité dans [timeoutvalue] minutes, elle se déclenche. Si vous utilisez des sessions stockées, cela ne se produit pas. – womp

+1

Je pense que compter sur session_end serait le seul moyen si vous avez besoin d'une liste globale précise des sessions utilisateur actives –

0

Qu'essayez-vous de faire?

Aucun événement précédant Session_End ne peut être utilisé pour accéder à l'objet Session.

Si vous avez enregistré un horodatage d'action relatif à la dernière utilisation de l'objet Session, puis que vous l'avez coché, vous pouvez vous faire une idée du moment où il devrait se terminer.
(en fonction de vos paramètres/configuration IIS). Cependant, le fait d'y accéder prolongerait la durée de vie de l'objet Session.

Bien sûr, vous devez vérifier cela d'une manière ou d'une autre, soit en utilisant un postback caché Ajax qui déclenche un événement ou quelque chose de similaire.

Mais vraiment je ne le conseillerais pas. Qu'est-ce que vous essayez de faire que vous en avez besoin?

+1

J'essaye de garder la liste globale de tous les utilisateurs avec la session active. Donc, j'ai besoin de nettoyer la session de l'utilisateur quand il se termine (considérons, cet utilisateur ne s'est pas déconnecté, il ou elle vient de fermer le navigateur), donc j'ai besoin de supprimer cet utilisateur de hashtable global, par GUID de session. Pour autant que je sache, SessionID peut être différent pour différentes demandes, donc je ne peux pas utiliser celui-là –

Questions connexes