Cette documentation est archivée et n’est pas conservée.

Vue d'ensemble de l'état de session

L'état de session ASP.NET vous permet de stocker et de récupérer des valeurs pour un utilisateur à mesure que ce dernier navigue dans les différentes pages ASP.NET qui composent une application Web. HTTP est un protocole sans état, ce qui signifie que votre serveur Web traite chaque demande HTTP d'une page comme une demande indépendante ; le serveur ne conserve aucune information des valeurs de variables utilisées lors des précédentes demandes. L'état de session ASP.NET identifie les demandes du même navigateur en tant que session dans une fenêtre à durée limitée et permet de faire persister les valeurs de variables pour la durée de cette session.

L'état de session ASP.NET est activé par défaut pour toutes les applications ASP.NET.

Outre l'état de session, les autres possibilités sont l'état de l'application (voir la propriété Application) qui stocke des variables accessibles par tous les utilisateurs d'une application ASP.NET ; l'espace de noms System.Web.Profile qui rend persistantes les valeurs de l'utilisateur dans un magasin de données sans délai d'expiration ; l'espace de noms System.Web.Caching qui stocke les valeurs fréquemment utilisées dans une mémoire disponible pour toutes les applications ASP.NET ; le contrôle System.Web.UI.WebControls ASP.NET qui rend persistant les valeurs de contrôle dans le contrôle ViewState ; Cookies ; le code QueryString et les champs d'un formulaire HTML disponibles dans un paramètre POST HTTP à l'aide de la collection Form. Pour une comparaison des différentes options de gestion d'état, consultez Recommandations sur la gestion d'état ASP.NET.

Variables de session

Les variables de session sont stockées dans une collection SessionStateItemCollection qui s'affiche via la propriété System.Web.HttpContext.Session. La collection de variables de session est indexée par le nom de la variable ou par un index d'entiers. Les variables de session sont créées par une simple référence à leur nom. Vous ne devez pas déclarer de variable de session ni en ajouter explicitement à la collection. Par exemple, l'exemple de code suivant crée des variables de session pour le prénom et le nom d'un utilisateur et leur affecte des valeurs récupérées dans les contrôles TextBox.

Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;

Par défaut, les variables de session peuvent être de type .NET. L'exemple de code suivant stocke une liste ArrayList de valeurs dans une variable de session appelée « StockPicks. » Notez que la valeur retournée par la variable de session « StockPicks » doit être castée comme étant le type approprié dès la récupération dans la collection SessionStateItemCollection.

RemarqueRemarque

Lorsque vous utilisez un mode d'état de session autre que InProc, la variable de session doit être de type .NET primitif ou sérialisable, parce que sa valeur est stockée dans un magasin de données externe. Pour plus d'informations, consultez Modes d'état de session.

// When retrieving an object from session state, cast it as 
// the appropriate type.
ArrayList stockPicks = (ArrayList)Session["StockPicks"];

// Write the modified stock picks list back to session state.
Session["StockPicks"] = stockPicks;

Identificateurs de session

Les sessions sont identifiées par un identificateur de session unique pouvant être lu à l'aide de la propriété SessionID. Lorsque l'état de session est activé pour une application ASP.NET, chaque demande d'une page de l'application est examinée par rapport à une valeur SessionID envoyée à partir du navigateur. Si aucune valeur SessionID n'est fournie, ASP.NET démarre une nouvelle session et la propriété SessionID de cette session est envoyée au navigateur avec la réponse.

Les valeurs SessionID sont stockées par défaut dans un cookie, mais vous pouvez également configurer votre application pour qu'elle stocke les valeurs SessionID de l'URL d'une session « sans cookie ». Pour plus d'informations, consultez Identificateurs de session.

Une session est considérée comme active tant que les demandes continuent à être effectuées avec la même valeur SessionID. Si la durée entre les demandes d'une session donnée dépasse la valeur du délai d'expiration spécifiée en minutes, le système considère que la session a expiré. Les demandes effectuées avec une valeur SessionID qui a expiré entraînent le démarrage d'une nouvelle session.

Événements de session

ASP.NET fournit deux événements qui vous permettent de gérer les sessions utilisateur : l'événement Session_OnStart déclenché à l'entame d'une nouvelle session et l'événement Session_OnEnd déclenché à l'annulation ou à l'expiration d'une session. Les événements de session sont spécifiés dans le fichier Global.asax d'une application ASP.NET. Notez que l'événement Session_OnEnd n'est pas pris en charge si la session Mode n'a pas une valeur différente de InProc, qui est le mode par défaut.

RemarqueRemarque

Si le fichier Global.asax ou Web.config d'une application ASP.NET est modifié, cette dernière est redémarrée et 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 dernières date et heure modifiées du fichier Global.asax ou Web.config d'une application.

Pour plus d'informations, consultez Événements d'état de session.

Modes de session

L'état de session ASP.NET prend en charge de nombreuses options de stockage différentes pour les variables de session. Chaque option est identifiée comme une propriété Mode d'état de session. Le comportement par défaut consiste à stocker les variables de session dans l'espace mémoire du processus de travail ASP.NET. Toutefois, vous pouvez également configurer cet état de session pour qu'il soit stocké dans un processus distinct, dans une base de données SQL Server ou dans une source de données personnalisée. Si vous ne souhaitez pas que l'état de session soit activé pour votre application, vous pouvez affecter la propriété Off au mode de session.

Pour plus d'informations, consultez Modes d'état de session.

Configuration de l'état de session

L'état de session est configuré à l'aide de l'élément sessionState de la section de configuration system.web. Vous pouvez également configurer l'état de session à l'aide de la directive de page EnableSessionState.

L'élément sessionState vous permet de spécifier le mode de stockage des données par la session, le mode d'envoi des valeurs de l'identificateur de session entre le client et le serveur, la valeur Timeout de la session et les valeurs de prise en charge en fonction de la valeur Mode de la session. Par exemple, l'élément sessionState suivant configure une application pour le mode de session SQLServer, avec une valeur Timeout de 30 minutes, et spécifie que les identificateurs de session sont stockés dans l'URL.

<sessionState mode="SQLServer"
  cookieless="true "
  regenerateExpiredSessionId="true "
  timeout="30"
  sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
  stateNetworkTimeout="30"/>

Vous pouvez désactiver l'état de session d'une application en affectant la valeur Off au mode d'état de session. Si vous souhaitez désactiver l'état de session uniquement pour une page d'application, vous pouvez affecter la valeur false à la directive de page EnableSessionState. Notez que la directive de page EnableSessionState peut également avoir le paramètre ReadOnly pour permettre l'accès en lecture seule aux variables de session.

Demandes simultanés et état de session

L'accès à l'état de session ASP.NET s'effectue exclusivement par session, ce qui signifie que si deux utilisateurs différents effectuent des demandes simultanées, l'accès à chaque session distincte est accordé simultanément. Toutefois, si deux demandes simultanées sont effectuées pour la même session (c'est-à-dire à l'aide de la même valeur SessionID), la première demande reçue obtient l'accès exclusif aux informations sur la session et la deuxième demande ne s'exécute qu'une fois la première demande terminée, ou lorsque le verrouillage exclusif des informations est désactivé du fait de l'expiration du délai de verrouillage de la première demande. Si la directive de page EnableSessionState a la valeur ReadOnly, une demande d'informations de session en lecture seule n'entraîne pas de verrouillage exclusif des données de session. Les demandes de données de session en lecture seule risquent encore de patienter jusqu'à ce qu'un verrouillage obtenu par une demande de données de session en lecture-écriture soit désactivé.

Voir aussi

Afficher: