Événements d'état de session

Mise à jour : novembre 2007

ASP.NET fournit deux événements qui vous permettent de gérer les sessions utilisateur : l'événement Session_OnStart déclenché au début d'une nouvelle session et l'événement Session_OnEnd déclenché à l'abandon ou à l'expiration d'une session.

Remarque :

Si le fichier Global.asax ou Web.config d'une application ASP.NET est modifié, l'application redémarre. Si le mode d'état de session actuel est InProc, toutes les valeurs stockées dans l'état de l'application ou de session sont perdues. Sachez que certains logiciels antivirus peuvent mettre à jour les date et heure de dernière modification du fichier Global.asax ou Web.config d'une application. Pour plus d'informations sur la définition du mode d'état de session, consultez Modes d'état de session.

Événement Session_OnStart

Vous pouvez gérer l'événement Session_OnStart en ajoutant une sous-routine nommée Session_OnStart au fichier Global.asax. La sous-routine Session_OnStart est exécutée au début d'une demande si cette dernière commence une nouvelle session. Une nouvelle session est démarrée si une demande effectuée ne contient pas de valeur SessionID ou si la propriété SessionID contenue dans la demande fait référence à une session qui a expiré.

Vous pouvez utiliser l'événement Session_OnStart pour initialiser des variables de session et suivre des informations relatives à une session.

Événement Session_OnEnd

Vous pouvez gérer l'événement Session_OnEnd en ajoutant une sous-routine nommée Session_OnEnd au fichier Global.asax. La sous-routine Session_OnEnd est exécutée lorsque la méthode Abandon a été appelée ou que la session a expiré. Une session expire lorsque le nombre de minutes spécifié par la propriété Timeout s'écoule sans qu'une demande ne soit effectuée pour la session.

L'événement Session_OnEnd est pris en charge uniquement lorsque la propriété Mode de l'état de session a la valeur InProc, qui est la valeur par défaut. Si l'état de session Mode est StateServer ou SQLServer, l'événement Session_OnEnd du fichier Global.asax est ignoré. Si l'état de session Mode a la valeur Custom, la prise en charge de l'événement Session_OnEnd est déterminée par le fournisseur de magasins d'état de session personnalisé.

Vous pouvez utiliser l'événement Session_OnEnd pour nettoyer les informations relatives à la session, par exemple celles d'un utilisateur suivies dans une source de données par la valeur SessionID.

Exemples d'événements de session

L'exemple de code suivant montre un exemple des sous-routines Session_OnStart et Session_OnEnd que vous pouvez ajouter au fichier Global.asax. Les sous-routines définies dans cet exemple créent un compteur qui effectue le suivi du nombre d'utilisateurs se servant de l'application. Dans la mesure où l'événement Session_OnEnd n'est pris en charge que pour le stockage de l'état de session intra-processus, cet exemple ne fonctionne correctement que lorsque la propriété Mode de l'état de session a la valeur InProc.

<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>

Voir aussi

Concepts

Vue d'ensemble de l'état de session ASP.NET

Vue d'ensemble de la gestion d'état ASP.NET