Partager via


Modes d'état de session

Mise à jour : novembre 2007

L'état de session ASP.NET prend en charge plusieurs options de stockage des données de session. Chaque option est identifiée par une valeur dans l'énumération SessionStateMode. La liste suivante décrit les modes d'état de session disponibles :

  • Le mode InProc stocke l'état de session en mémoire sur le serveur Web. Il s'agit du mode par défaut.

  • Mode StateServer qui stocke l'état de session dans un processus distinct appelé service d'état ASP.NET. Il garantit que l'état de session est conservé en cas de redémarrage de l'application Web et qu'il est disponible pour plusieurs serveurs Web dans une batterie de serveurs Web.

  • Le mode SQLServer stocke l'état de session dans une base de données SQL Server. Il garantit que l'état de session est conservé en cas de redémarrage de l'application Web et qu'il est disponible pour plusieurs serveurs Web dans une batterie de serveurs Web.

  • Le mode Custom permet de spécifier un fournisseur de stockage personnalisé.

  • Mode Off qui désactive l'état de session.

Vous pouvez spécifier le mode que l'état de session ASP.NET doit utiliser en assignant une valeur d'énumération SessionStateMode à l'attribut mode de l'élément sessionState dans le fichier Web.config de votre application. Les modes autres que InProc et Off nécessitent des paramètres supplémentaires, comme les valeurs de chaîne de connexion (voir plus bas). Vous pouvez consulter l'état de session actuellement sélectionné en accédant à la valeur de la propriété HttpSessionState.Mode.

Mode in-process

In-process est le mode d'état de session par défaut et est spécifié par la valeur d'énumération InProcSessionStateMode. Le mode in-process stocke les variables et les valeurs d'état de session sur le serveur Web local. C'est le seul mode qui prend en charge l'événement Session_OnEnd. Pour plus d'informations sur l'événement Session_OnEnd, consultez Événements d'état de session.

Attention :

Si vous activez le mode jardin Web en affectant la valeur true à l'attribut webGarden dans l'élément processModel du fichier Web.config de l'application, n'utilisez pas le mode d'état de session InProc. Si vous le faites, il peut s'ensuivre une perte de données si les différentes demandes d'une même session sont fournies par des processus de travail différents.

Mode Serveur d'état

Le mode StateServer stocke l'état de session dans un processus, connu sous le nom de service d'état ASP.NET, distinct du processus de travail ASP.NET ou du pool d'applications IIS. L'utilisation de ce mode garantit que l'état de session est conservé en cas de redémarrage de l'application Web et qu'il est disponible pour plusieurs serveurs Web dans une batterie de serveurs Web.

Pour utiliser le mode StateServer, vous devez d'abord être sûr que le service d'état ASP.NET s'exécute sur le serveur utilisé pour le magasin de session. Le service d'état ASP.NET est installé comme service lors de l'installation d'ASP.NET et du .NET Framework. Le service d'état ASP.NET est installé à l'emplacement suivant :

systemroot\Microsoft.NET\Framework\numéroversion\aspnet_state.exe

Pour configurer une application ASP.NET afin qu'elle utilise le mode StateServer, procédez comme suit dans le fichier Web.config de l'application :

L'exemple suivant illustre un paramètre de configuration pour le mode StateServer où l'état de session est stocké sur un ordinateur distant nommé SampleStateServer :

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>
Remarque :

Les objets stockés dans l'état de session doivent être sérialisables si le mode a la valeur StateServer. Pour plus d'informations sur les objets sérialisables, consultez la classe SerializableAttribute.

Pour utiliser le mode StateServer dans une batterie de serveurs Web, vous devez avoir les mêmes clés de chiffrement spécifiées dans l'élément machineKey de votre configuration Web pour toutes les applications faisant partie de la batterie de serveurs Web. Pour plus d'informations sur la création de clés d'ordinateur, consultez l'article 313091 de la Base de connaissances, « Comment créer des clés à en utilisant Visual Basic .NET pendant utilisation d'authentification par formulaires » (https://www.microsoft.com/france/support.).

Mode SQL Server

Le mode SQLServer stocke l'état de session dans une base de données SQL Server. L'utilisation de ce mode garantit que l'état de session est conservé en cas de redémarrage de l'application Web et qu'il est disponible pour plusieurs serveurs Web dans une batterie de serveurs Web.

Remarque :

Les objets stockés dans l'état de session doivent être sérialisables si le mode est SQL Server. Pour plus d'informations sur les objets sérialisables, consultez la classe SerializableAttribute.

Pour utiliser le mode SQLServer, vous devez d'abord être sûr que la base de données d'état de session ASP.NET est installée sur SQL Server. Vous pouvez installer la base de données d'état de session ASP.NET à l'aide de l'outil Aspnet_regsql.exe, comme décrit ultérieurement dans cette rubrique.

Pour configurer une application ASP.NET afin qu'elle utilise le mode SQLServer, procédez comme suit dans le fichier Web.config de l'application :

L'exemple suivant illustre un paramètre de configuration pour le mode SQLServer où l'état de session est stocké sur un serveur SQL nommé SampleSqlServer :

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>
Remarque :

Si vous spécifiez une connexion approuvée avec votre serveur SQL dans le fichier de configuration à l'aide de l'attribut sqlConnectionString de l'élément sessionState, l'objet SessionStateModule se connecte au serveur SQL à l'aide de sécurité intégrée de SQL Server. La connexion est établie à l'aide de l'identité du processus ASP.NET ou des informations d'identification utilisateur fournies pour l'élément de configuration identity, si elles existent. Vous pouvez spécifier que l'identité empruntée par les services IIS soit utilisée en spécifiant <identity impersonate="true" /> et en affectant la valeur false à l'attribut useHostingIdentity de l'élément de configuration sessionState. Pour plus d'informations sur l'identité du processus ASP.NET, consultez Configuration de l'identité de processus ASP.NET et Emprunt d'identité ASP.NET.

Pour configurer le mode SQLServer pour une batterie de serveurs Web, dans le fichier de configuration de chaque serveur Web, définissez l'attribut sqlConnectionString de l'élément sessionState pour qu'il pointe sur la même base de données SQL Server. Le chemin d'accès de l'application ASP.NET de la métabase IIS doit être identique sur tous les serveurs Web qui partagent l'état de session dans la base de données SQL Server. Pour plus d'informations sur les étapes permettant de résoudre le problème lorsque les chemins d'accès des applications diffèrent d'un serveur à l'autre, consultez l'article 325056, « Problème, état de session est perdu de batterie de serveurs Web si vous utilisez le mode SQLServer ou StateServer de session », dans la Base de connaissances Microsoft à l'adresse https://www.microsoft.com/france/support.

Installation de la base de données d'état de session à l'aide de l'outil Aspnet_regsql.exe

Pour installer la base de données d'état de session sur SQL Server, exécutez l'outil Aspnet_regsql.exe présent dans le dossier systemroot\Microsoft.NET\Framework\numéroversion de votre serveur Web. Fournissez les informations suivantes avec la commande :

  • Nom de l'instance du serveur SQL Server à l'aide de l'option -S.

  • Informations d'identification de connexion pour un compte ayant l'autorisation de créer une base de données sur SQL Server. Utilisez l'option -E pour utiliser l'utilisateur actuellement connecté, ou l'option -U pour spécifier un ID utilisateur avec l'option -P permettant de spécifier un mot de passe.

  • Option de ligne de commande -ssadd pour ajouter la base de données d'état de session.

    Par défaut, vous ne pouvez pas utiliser l'outil Aspnet_regsql.exe pour installer la base de données d'état de session sur SQL Server Express. Pour exécuter l'outil Aspnet_regsql.exe et installer une base de données SQL Server Express, vous devez d'abord activer l'option SQL Server Agent XPs à l'aide des commandes T-SQL, comme illustré ci-après :

    EXECUTE sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'Agent XPs', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'show advanced options', 0
    RECONFIGURE WITH OVERRIDE
    GO
    

    Vous devez exécuter ces commandes T-SQL pour toute instance de SQL Server Express où l'option Agent XPs est désactivée.

Par défaut, l'outil Aspnet_regsql.exe crée une base de données nommée ASPState qui contient les procédures stockées prenant en charge le mode SQLServer. Les données de session elles-mêmes sont stockées par défaut dans la base de données tempdb. Vous pouvez utiliser éventuellement l'option -sstype pour modifier l'emplacement de stockage des données de session. Le tableau suivant répertorie les valeurs possibles pour l'option -sstype.

Option

Description

t

Stocke les données de session dans la base de données SQL Server tempdb. Il s'agit de l'option par défaut. Si vous stockez les données de session dans la base de données tempdb, celles-ci sont perdues en cas de redémarrage du serveur SQL Server.

p

Stocke les données de session dans la base de données ASPState, et non dans la base de données tempdb.

c

Stocke les données de session dans une base de données personnalisée. Si vous spécifiez l'option c, vous devez aussi inclure le nom de la base de données personnalisée à l'aide de l'option -d.

Par exemple, la commande suivante crée une base de données nommée ASPState sur une instance SQL Server nommée SampleSqlServer et spécifie que les données de session sont également stockées dans la base de données ASPState :

aspnet_regsql.exe -S SampleSqlServer -E -ssadd -sstype p

Remarque :

Si vous exécutez ASP.NET 1.0 ou ASP.NET 1.1, vous ne pouvez pas utiliser l'outil Aspnet_regsql.exe afin de configurer ASP.NET pour stocker l'état de session dans une base de données SQL Server persistante. Cependant, vous pouvez obtenir des scripts pour stocker l'état de session dans une base de données persistante. Pour plus d'informations, consultez l'article 311209, « COMMENT : configurer ASP.NET pour la gestion d'un état de session SQL Server persistant » (en anglais) dans la Base de connaissances Microsoft à l'adresse https://www.microsoft.com/france/support. Par ailleurs, les serveurs Web qui exécutent ASP.NET 1.0 ou ASP.NET 1.1 peuvent diriger l'état de session persistant vers un serveur SQL Server sur lequel le schéma d'état de session ASP.NET 2.0 est installé.

En mode SQLServer, vous pouvez configurer plusieurs ordinateurs exécutant SQL Server pour qu'ils fonctionnent comme un cluster avec basculement, lequel représente deux ordinateurs identiques ou plus exécutant SQL Server et stockant les données d'une base de données unique. Si un ordinateur exécutant SQL Server échoue, un autre serveur du cluster peut prendre la relève et servir les demandes sans perte des données de session. Pour configurer le mode SQL Server comme cluster avec basculement, vous devez spécifier -sstype p lorsque vous exécutez l'outil Aspnet_regsql.exe afin que les données d'état de session soient stockées dans la base de données ASPState et non dans la base de données tempdb. Le stockage de l'état de session dans la base de données tempdb n'est pas pris en charge pour un cluster SQL Server. Pour plus d'informations sur la configuration du mode SQL Server comme cluster avec basculement, consultez l'article 323262, « Comment état de session ASP.NET d'utilisation SQL Server Mode dans un cluster de basculement », dans la Base de connaissances Microsoft, à l'adresse https://www.microsoft.com/france/support.

Mode personnalisé

Le mode Custom spécifie que vous souhaitez stocker les données d'état de session à l'aide d'un fournisseur de magasins d'état de session personnalisé. Lorsque vous configurez votre application ASP.NET avec une propriété Mode de Custom, vous devez spécifier le type du fournisseur de magasins d'état de session à l'aide du sous-élément providers de l'élément de configuration sessionState. Vous spécifiez le type de fournisseur à l'aide d'un sous-élément add et incluez à la fois un attribut type qui spécifie le nom de type du fournisseur et un attribut name qui spécifie le nom d'instance du fournisseur. Le nom de l'instance du fournisseur est ensuite fourni à l'attribut customProvider de l'élément sessionState pour configurer l'état de session ASP.NET de façon à ce qu'il utilise cette instance pour stocker et récupérer les données de session.

L'exemple suivant illustre les éléments d'un fichier Web.config qui spécifient que l'état de session ASP.NET utilise un fournisseur de magasins d'état de session personnalisé :

<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" 
      connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState 
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
          type="Samples.AspNet.Session.OdbcSessionStateStore"
          connectionStringName="OdbcSessionServices" 
          writeExceptionsToEventLog="false" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

Pour plus d'informations sur les fournisseurs de magasins d'état de session personnalisés, consultez Implémentation d'un fournisseur de magasins d'état de session.

Remarque :

Un fournisseur de magasins d'état de session personnalisé accède à toute ressource sécurisée, tel que SQL Server, à l'aide de l'identité du processus ASP.NET ou des informations d'identification fournies à l'élément de configuration identity, si elles existent. Vous pouvez spécifier que l'identité empruntée par les services IIS soit utilisée en spécifiant <identity impersonate="true" /> et en affectant la valeur false à l'attribut useHostingIdentity de l'élément de configuration sessionState. Pour plus d'informations sur l'identité du processus ASP.NET, consultez Configuration de l'identité de processus ASP.NET et Emprunt d'identité ASP.NET.

Voir aussi

Concepts

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

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

Référence

providers, élément de sessionState (Schéma des paramètres ASP.NET)