La sessione ASP.NET può vivere più a lungo dell'applicazione
-
27-10-2019 - |
Domanda
Questa potrebbe essere una domanda sciocca/zoppa, soprattutto dopo aver lavorato così a lungo con ASP.NET :), ma devo esserne sicuro.
È possibile avere una sessione (ovvero la sessione ASP.NET) sopravvive all'applicazione (App Instance/App Domain/Application Variable)?
In altre parole, se Application_End viene chiamato in Global.asax, indica che non ci sarà una sessione più attiva? E qualsiasi nuova richiesta si tradurrà in un'applicazione_start seguita da una nuova session_start?
Nota, la sessione potrebbe non essere sempre inproc, la sessione potrebbe essere in un server di stato o in un server SQL.
Soluzione
Con il valore predefinito InProc
Stato della sessione, l'applicazione terminerà quando l'ultima sessione è scaduta, a quel punto Application_End
si verifica. In questo scenario l'intero appDomain
è demolito e tutta la memoria liberata. Man mano che le sessioni sono persistite nella memoria, vengono distrutte permanentemente a questo punto, e quindi non possono mai vivere oltre la vita dell'applicazione.
Se si utilizza Sql Server
o State Server
Laddove la sessione viene memorizzata su una macchina separata, quindi quando l'applicazione viene demolita le sessioni può continuare a vivere. Quindi, poiché il client conserva il cookie della sessione originale nel browser, la prossima volta che visitano il sito viene riavviata e viene riavviata e sessionid
utilizzato per identificare la loro sessione esistente.
Altri suggerimenti
Sì, quando si inserisce lo stato in SQL Server, l'applicazione potrebbe riavviare ma manterrai comunque lo stato di sessione