2009-04-19 9 views

Respuesta

17

Siempre creí que Application_AcquireRequestState fue el primer evento en Global.asax que pudo acceder a la sesión actual. Definitivamente no es Application_BeginRequest.

+0

This de hecho, hace que Session esté disponible en MVC3 y 4 e IIS7 y 8, SI la solicitud se ajusta a la canalización de ASP.Net; por ejemplo, si la solicitud es para un Controlador o Página web, la Sesión está disponible. Sin embargo, si se trata de una imagen, un archivo CSS, etc., en la mayoría de las configuraciones, la Sesión no está disponible y ni siquiera devuelve un valor nulo; solo al intentar acceder se obtiene una HttpException. –

+2

Sé que esta respuesta es muy antigua, pero busqué la misma respuesta. Encontré algo de información adicional: Application_AcquireRequestState es el lugar correcto para obtener la sesión antes de que el controlador ejecute la solicitud. si desea saber, si hay una sesión disponible, marque Context.Session para null. esto no generará la excepción y, una vez que sepa, hay una sesión en la que puede usar la variable Session para acceder a ella. – zreptil

-4

Según link text, los primeros eventos en global.asax que se puede acceder a los objetos de sesión es cuando se dispara global.asax Session_Start caso

Session__Start: Se activa cuando un nuevo el usuario visita el sitio web de la aplicación.
Session__End: Se activa cuando tiempos de la sesión de un usuario a cabo, fines, o que salgan del sitio Web de la aplicación

+5

Aquellos solo se dispararán la primera vez que alguien visite un sitio, no durante cada request –

-3

Es necesario utilizar BeginRequest (http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest.aspx), ya que es el primer evento disparado en el objeto HttpApplication (que hereda Global.asax).

Verá más sobre el ciclo de vida de la aplicación ASP.NET aquí - http://msdn.microsoft.com/en-us/library/ms178473.aspx (esto es para IIS 5 & IIS 6).

+2

Podría ser el primer _event_ activado en el objeto HttpApplication, pero ¿la sesión ya se ha deserializado? –

+0

De acuerdo con el ciclo de vida, se ha creado HttpContext, que HttpSessionState es una propiedad de –

+3

aparentemente esta respuesta es incorrecta según http://stackoverflow.com/questions/1704940/when-is-the-earliest-i-can-access -session-in-the-asp-net-mvc-page-lifecycle – andy

3

MSDN menciona casualmente que el estado de la sesión se adquiere durante el evento Application_PostAcquireRequestState. Ojalá fuera reformulado en la página Life Cycle Overview.

El último estado de sesión que puede acceder es en Application_PostRequestHandlerExecute, ya que es guardado por SessionStateModule durante el próximo evento Application_ReleaseRequestState.

+0

AcquireRequestState también lo tiene disponible; el uso de PostAcquireRequestState no impide que Session ejecute una excepción para solicitudes de imágenes, archivos css, etc. –

Cuestiones relacionadas