Recherche…


Syntaxe

  • Session ["Session_Key"] = Obj_Value;

Remarques

HTTP est sans état. L'état de session ASP.NET est une structure qui facilite la gestion de l'état entre les requêtes de page HTTP.

Session diffère des variables de niveau de classe par sa capacité à rester disponible dans les post-back et les différentes pages. Par exemple, une variable de session créée dans Page1.aspx sera disponible si l'utilisateur est redirigé vers Page2.aspx dans la même application.

De plus, contrairement aux variables statiques déclarées au niveau de la page, les variables de session sont indépendantes pour différents utilisateurs. Cela signifie que la modification de la valeur de la variable de session d'un utilisateur n'affectera pas la valeur de la même variable pour les autres utilisateurs.

Bien que ViewState puisse être utilisé pour stocker les données de l'utilisateur temporairement, il ne permet pas d'enregistrer des données sur plusieurs pages. En outre, le viewstate fait partie de la page et est envoyé au client. En conséquence, toute information critique liée à l'utilisateur ne peut pas être enregistrée dans ViewState , et c'est là que les variables de session deviennent utiles.

Utilisation de l'objet Session pour stocker des valeurs

L'objet System.Web.SessionState.HttpSessionState permet de conserver les valeurs entre les requêtes HTTP. Dans l'exemple ci-dessous, la préférence d'un utilisateur pour les avertissements est enregistrée dans la session. Plus tard, lors de l'envoi d'une autre requête à l'utilisateur, l'application peut lire cette préférence depuis la session et masquer les avertissements.

public partial class Default : System.Web.UI.Page
{
    public void LoadPreferences(object sender, EventArgs args)
    {
        // ... 
        // ... A DB operation that loads the user's preferences.
        // ...

        // Store a value with the key showWarnings
        HttpContext.Current.Session["showWarnings"] = false;
    }

    public void button2Clicked(object sender, EventArgs args)
    {
        // While processing another request, access this value.
        bool showWarnings = (bool)HttpContext.Current.Session["showWarnings"];
        lblWarnings.Visible = false;
    }
}    

Notez que les variables de session ne sont pas communes à tous les utilisateurs (tout comme les cookies) et qu'elles sont conservées sur plusieurs messages postés.

La session fonctionne en définissant un cookie contenant un identifiant pour la session des utilisateurs. Par défaut, cet identifiant est stocké dans la mémoire du serveur Web, avec les valeurs stockées sur celui-ci.

Voici une capture d'écran du cookie défini dans le navigateur de l'utilisateur pour suivre la session:

sessionStateCookie

Utilisation d'un magasin de sessions SQL

Si vous constatez que plusieurs serveurs doivent partager l'état de la session, leur stockage dans la mémoire de processus ASP.NET ne fonctionnera pas. Par exemple, vous pouvez déployer dans un environnement de batterie de serveurs Web avec un équilibreur de charge qui distribue les demandes à tour de rôle. Dans cet environnement, les requêtes d'un seul utilisateur peuvent être servies par plusieurs serveurs.

Dans le fichier web.config, vous pouvez configurer un magasin de sessions SQL Server.

<configuration>
  <system.web>
    <sessionState 
      mode="SQLServer"
      sqlConnectionString="Data Source=localhost;Integrated Security=SSPI"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

Pour créer le schéma SQL, utilisez l’outil aspnet_regsql. [SampleSqlServerName] est le nom d'hôte du serveur SQL. -ssadd indique à l'outil de créer la base de données d'état de session. -sstype p indique à l'outil de créer une nouvelle base de données avec le nom par défaut ASPState.

aspnet_regsql.exe -S [SampleSqlServerName] -U [Username] -P [Password] -ssadd -sstype p

Utilisation d'un magasin de sessions Amazon DynamoDB

Si vous ne souhaitez pas utiliser SQL Server, vous pouvez utiliser la base de données nosql Dynamo DB hébergée d'Amazon en tant que magasin de sessions.

Vous aurez besoin du kit SDK AWS. Pour l'installer à partir de la console du gestionnaire de packages Visual Studio nuget, utilisez la commande suivante

Install-Package AWSSDK 

Vous pouvez ensuite configurer votre fournisseur sessionState pour utiliser un fournisseur personnalisé. Vous devez spécifier la région et les informations d'identification, soit un profil ou une combinaison d'accès IAM et de clé secrète. Par défaut, cela créera une table nommée ASP.NET_SessionState.

<configuration>
  <system.web>
    <sessionState
      timeout="20"
      mode="Custom"
      customProvider="DynamoDBSessionStoreProvider">
      <providers>
        <add name="DynamoDBSessionStoreProvider"
             type="Amazon.SessionProvider.DynamoDBSessionStateStore"
             AWSProfileName="[PROFILE]"
             Region="[REGION]"
             CreateIfNotExist="true"
             />
      </providers>
    </sessionState>
  </system.web>
</configuration>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow