Eventi correlati allo stato sessione
Aggiornamento: novembre 2007
In ASP.NET sono disponibili due eventi che consentono di gestire le sessioni utente: l'evento Session_OnStart, che viene generato all'avvio di una nuova sessione, e l'evento Session_OnEnd, che viene generato alla chiusura o alla scadenza di una sessione.
Nota: |
---|
Se il file Global.asax o Web.config di un'applicazione ASP.NET viene modificato, l'applicazione verrà riavviata. Se la modalità corrente dello stato sessione è InProc, qualsiasi valore archiviato nello stato applicazione o nello stato sessione andrà perduto. Si tenga presente che alcuni programmi antivirus possono aggiornare la data e l'ora dell'ultima modifica del file Global.asax o Web.config di un'applicazione. Per informazioni sull'impostazione della modalità dello stato sessione, vedere Modalità stato sessione. |
Evento Session_OnStart
L'evento Session_OnStart può essere gestito mediante l'aggiunta di una subroutine denominata Session_OnStart nel file Global.asax. La subroutine Session_OnStart viene eseguita all'inizio di una richiesta se tale richiesta comporta l'avvio di una nuova sessione. L'avvio di una nuova sessione si verifica se viene effettuata una richiesta che non contiene un valore SessionID oppure se la proprietà SessionID contenuta nella richiesta fa riferimento a una sessione scaduta.
È possibile utilizzare l'evento Session_OnStart per inizializzare le variabili della sessione e per tenere traccia delle informazioni correlate alla sessione.
Evento Session_OnEnd
L'evento Session_OnEnd può essere gestito mediante l'aggiunta di una subroutine denominata Session_OnEnd nel file Global.asax. La subroutine Session_OnEnd viene eseguita quando è stato chiamato il metodo Abandon oppure quando la sessione è scaduta. Una sessione scade quando il numero di minuti specificato mediante la proprietà Timeout trascorre senza che venga effettuata alcuna richiesta relativa alla sessione.
L'evento Session_OnEnd è supportato solo quando la proprietà Mode relativa allo stato sessione è impostata sul valore predefinito InProc. Se la proprietà Mode dello stato sessione è impostata su StateServer o SQLServer, l'evento Session_OnEnd definito nel file Global.asax verrà ignorato. Se la proprietà Mode dello stato sessione è impostata su Custom, il supporto per l'evento Session_OnEnd sarà determinato dal provider dell'archivio dello stato sessione personalizzato.
È possibile utilizzare l'evento Session_OnEnd per cancellare le informazioni correlate alla sessione, ad esempio le informazioni di un utente registrate in un'origine dati tramite il valore SessionID.
Esempio di eventi correlati alla sessione
Nell'esempio di codice riportato di seguito vengono illustrate alcune subroutine Session_OnStart e Session_OnEnd che è possibile aggiungere al file Global.asax. Le subroutine definite nell'esempio creano un contatore che tiene traccia del numero di utenti che utilizzano attivamente l'applicazione. Si noti che questo esempio funziona correttamente solo quando la proprietà Mode dello stato sessione è impostata su InProc poiché l'evento Session_OnEnd è supportato solo per l'archiviazione in-process dello stato sessione.
<script language="VB" >
Public Sub Application_OnStart()
Application("UsersOnline") = 0
End Sub
Public Sub Session_OnStart()
Application.Lock()
Application("UsersOnline") = CInt(Application("UsersOnline")) + 1
Application.UnLock()
End Sub
Public Sub Session_OnEnd()
Application.Lock()
Application("UsersOnline") = CInt(Application("UsersOnline")) - 1
Application.UnLock()
End Sub
</script>
<script language="C#" >
public void Application_OnStart()
{
Application["UsersOnline"] = 0;
}
public void Session_OnStart()
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
public void Session_OnEnd()
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>