2009-04-19 8 views

Répondre

17

J'ai toujours cru que Application_AcquireRequestState était le premier événement dans Global.asax qui pouvait accéder à la session en cours. Ce n'est certainement pas Application_BeginRequest.

+0

rend en fait Session disponible dans MVC3 et 4 et IIS7 et 8, SI la requête correspond au pipeline ASP.Net; Par exemple, si la demande concerne un contrôleur ou une page Web, la session est disponible. Cependant, si c'est pour une image, un fichier css, etc., dans la plupart des configurations, Session n'est pas disponible et ne retourne même pas la valeur null - le simple fait d'y accéder vous donne une exception HttpException. –

+2

Je sais que cette réponse est très ancienne, mais j'ai cherché la même réponse. J'ai trouvé quelques informations supplémentaires: Application_AcquireRequestState est le bon endroit pour obtenir la session avant que la demande est exécutée par le gestionnaire. Si vous voulez savoir, si une session est disponible, vérifiez Context.Session pour null. Cela ne déclenchera pas l'exception et une fois que vous le savez, il existe une session dans laquelle vous pouvez utiliser la variable Session pour y accéder. – zreptil

-4

Selon link text, les premiers événements global.asax que vous pouvez accéder à des objets de session est quand global.asax feux événement Session_Start

Session__Start: Fired quand un nouveau l'utilisateur visite le site Web de l'application.
Session__End: Fired lorsqu'un des temps de session d'un utilisateur sur, se termine, ou ils quittent le site Web de l'application

+5

Ceux-ci ne tireront que la première fois que quelqu'un visite un site, pas pendant chaque request –

-3

Vous devez utiliser BeginRequest (http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest.aspx) car il est le premier événement a tiré sur l'objet HttpApplication (que le Global.asax hérite).

Vous en apprendrez plus sur le cycle de vie de l'application ASP.NET ici - http://msdn.microsoft.com/en-us/library/ms178473.aspx (c'est pour IIS 5 & IIS 6).

+2

Il s'agit peut-être du premier _event_ déclenché sur l'objet HttpApplication, mais la session est-elle désérialisée? –

+0

Selon le cycle de vie, le HttpContext a été créé, lequel HttpSessionState est une propriété de –

+3

apparemment cette réponse est incorrecte selon http://stackoverflow.com/questions/1704940/when-is-the-earliest-i-can-access -session-dans-le-asp-net-mvc-page-lifecycle – andy

3

MSDN mentionne en passant que l'état de la session est acquis au cours de l'événement Application_PostAcquireRequestState. J'aimerais qu'il soit reformulé à la page Life Cycle Overview.

L'état de session le plus récent auquel vous pouvez accéder est Application_PostRequestHandlerExecute, car il est enregistré par SessionStateModule lors de l'événement suivant Application_ReleaseRequestState.

+0

AcquireRequestState l'a également disponible; l'utilisation de PostAcquireRequestState n'empêche pas Session d'émettre une exception pour les demandes d'images, de fichiers CSS, etc. –

Questions connexes