2009-04-19 10 views

risposta

17

Ho sempre creduto che Application_AcquireRequestState fosse il primo evento in Global.asax che potesse accedere alla sessione corrente. Non è sicuramente il Application_BeginRequest.

+0

Questo rende infatti disponibile Session in MVC3 e 4 e IIS7 e 8, SE la richiesta si adatta alla pipeline ASP.Net; ad esempio se la richiesta riguarda un controller o una pagina Web, la sessione è disponibile. Tuttavia, se è per un'immagine, file css, ecc, nella maggior parte delle configurazioni Sessione non è disponibile e non restituisce nemmeno null - solo tentando di accedervi si ottiene una HttpException. –

+2

So che questa risposta è molto vecchia, ma ho cercato la stessa risposta. Ho trovato alcune informazioni aggiuntive: Application_AcquireRequestState è il posto giusto per ottenere la sessione prima che la richiesta venga eseguita dal gestore. se vuoi sapere, se una sessione è disponibile, controlla Context.Session per null. questo non solleverà l'eccezione e, dopo aver saputo, c'è una sessione, puoi usare la variabile Session per accedervi. – zreptil

-4

Secondo link text, i primi eventi in Global.asax cui è possibile accedere oggetti di sessione è quando global.asax spara Session_Start evento

Session__Start: Fired in caso di nuove l'utente visita il sito Web dell'applicazione.
Session__End: sparati quando i tempi della sessione di un utente fuori, finisce, o lasciano il sito Web di applicazione

+5

Questi verranno attivati ​​solo la prima volta che qualcuno visita un sito, non durante ogni richiesta –

-3

È necessario utilizzare BeginRequest (http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest.aspx) in quanto è il primo evento sparato sull'oggetto HttpApplication (che il Global.asax eredita).

Vedrete di più sul ciclo di vita delle applicazioni ASP.NET qui - http://msdn.microsoft.com/en-us/library/ms178473.aspx (questo è per IIS 5 & IIS 6).

+2

Potrebbe essere il primo _event_ attivato sull'oggetto HttpApplication, ma la sessione verrà deserializzata, a quel punto? –

+0

In base al ciclo di vita è stato creato HttpContext, che HttpSessionState è una proprietà di –

+3

apparentemente questa risposta non è corretta secondo http://stackoverflow.com/questions/1704940/when-is-the-earliest-i-can-access -session-in-the-asp-net-mvc-page-lifecycle – andy

3

MSDN accenna casualmente che lo stato della sessione viene acquisito durante l'evento Application_PostAcquireRequestState. Vorrei che fosse rideterminato alla pagina Life Cycle Overview.

Il più recente è possibile accedere allo stato della sessione in Application_PostRequestHandlerExecute, poiché viene salvato da SessionStateModule durante l'evento successivo Application_ReleaseRequestState.

+0

AcquireRequestState lo ha anche disponibile; l'utilizzo di PostAcquireRequestState non impedisce a Session di generare un'eccezione per le richieste di immagini, file CSS, ecc. –

Problemi correlati