5

Questa potrebbe essere una domanda sciocca/zoppa, soprattutto dopo aver lavorato così a lungo con ASP.NET :), ma devo essere sicuro.La sessione ASP.NET può durare più a lungo dell'applicazione

È possibile che la sessione (ovvero la sessione ASP.NET) sopravviva all'applicazione (istanza app/dominio app/variabile Applicazione)?

In altre parole, se Application_End viene chiamato in Global.asax, indica che non ci sarà più sessione attiva? e ogni nuova richiesta produrrà un Application_Start seguito da un nuovo Session_Start?

nota, la sessione non può essere sempre InProc, la sessione potrebbe essere in un server di Stato o server SQL.

risposta

5

Con lo stato di sessione di default InProc, l'applicazione terminerà quando l'ultimo sessione è scaduta, a cui il punto Application_End si verifica. In questo scenario l'intero appDomain viene rimosso e tutta la memoria viene liberata. A mano a mano che le sessioni vengono mantenute in memoria, a questo punto vengono definitivamente distrutte e quindi non possono mai vivere oltre la vita dell'applicazione.

Se si utilizza Sql Server o State Server in cui la sessione viene archiviata su una macchina separata, quando l'applicazione viene interrotta, le sessioni possono continuare a essere attive. Quindi, poiché il client mantiene il cookie di sessione originale nel browser, la volta successiva che visitano il sito, la sessione viene riavviata e sessionid utilizzato per identificare la sessione esistente.

+0

Sto cercando lo scenario da un'altra direzione. Cosa succede se l'applicazione termina (diciamo riavviando IIS o processando il riciclo ecc.), La sessione sarà ancora attiva? –

+1

Bene se si memorizza la sessione in un database o server di stato allora sì, il client avrà ancora un cookie di sessione. Quindi, la volta successiva che visitano e l'applicazione si avvia, è possibile riavviare la sessione (perché i dati della sessione persistono ancora contro il sessionid). – TheCodeKing

+0

Hmm, grazie. Stavo cercando di salvare alcune informazioni riguardanti una sessione nell'applicazione (variabile statica). Ma sembra che non possiamo garantire che la variabile statica avrà sempre valore per ogni sessione attiva. Questo è triste :( –

4

Sì, quando si mette lo stato in SQL Server l'applicazione potrebbe riavviare, ma si continua a mantenere lo stato di sessione

+0

Anche questa risposta è corretta. Grazie –