2010-01-08 40 views
24

Necesito acceder a las variables de sesión en el evento Session_End en global.asax.cs, pero HttpContext.Current es nulo, por lo que no se puede acceder a ninguna de las variables de sesión.variables de sesión de asp.net en Session_End

a) ¿Puedo acceder a la sesión de usuario de alguna manera diferente, o

b) ¿Hay alguna otra parte sobresaliente evento antes de Session_End, pude acceder a las variables de sesión de usuario?

Respuesta

41

HttpContext.Current no está disponible dentro de Session_End, pero puede acceder a la instancia de sesión directamente con this.Session.

+2

Sí. System.Web.SessionState.HttpSessionState es el que debería usar en lugar de HttpContext.Current. Gracias –

+0

Realmente ayuda completa, gracias. – Bharat

+0

realmente útil después de ver http://stackoverflow.com/questions/12294532/asp-net-values-of-session-variables-in-session-end-event this Dudo por qué está dando null. y verificar que he usado HttpContext.Current (y – MSTdev

-1

A menos que esté utilizando Session_End para el propósito específico de tomar medidas cuando una sesión expira, no es una buena idea confiar en Session_End.

No creo que haya ninguna manera confiable de capturar el final de la sesión de un usuario (por ejemplo, cuando cierran el navegador).

+2

Esto no es necesariamente cierto. Si está utilizando sesiones InProc, cuando una sesión no ha tenido actividad en [timeoutvalue] minutes, se activará. Si está utilizando sesiones almacenadas, esto no sucede. – womp

+1

Creo que confiar en session_end sería la única manera si necesita una lista global precisa de sesiones de usuario activas –

0

¿Qué estás tratando de hacer?

No hay ningún evento justo antes de Session_End que podría usar para acceder al objeto Session.

Si almacenó una marca de tiempo de acción relacionada con la última vez que se usó el objeto Session, y luego lo verificó, podría tener una idea de cuándo debería finalizar.
(En función de su configuración/configuración de IIS). Sin embargo, el hecho de acceder a él prolongaría la vida útil del objeto Session.

Por supuesto, deberías comprobar esto de alguna manera, ya sea mediante el uso de una devolución de datos oculta de Ajax que activa un evento o algo similar.

Pero realmente no aconsejaría esto. ¿Qué estás tratando de hacer para que lo necesites?

+1

Estoy tratando de mantener la lista global de todos los usuarios con sesión activa. Por lo tanto, necesito limpiar la sesión del usuario cuando termine (consideremos que el usuario no cerró la sesión, acaba de cerrar el navegador), así que necesito eliminar este usuario de la tabla hash global, por algún GUID de sesión. Hasta donde yo sé, SessionID puede ser diferente para diferentes solicitudes, por lo que no puedo usar ese –

Cuestiones relacionadas