web-dev-qa-db-fra.com

Variable de session Asp.net

J'ai un projet asp.net avec du code c # derrière. J'ai une classe statique appelée GlobalVariable où je stocke des informations, comme le produit actuellement sélectionné par exemple.

Cependant, j'ai vu que lorsque deux utilisateurs utilisent le site Web, si l'un change le produit sélectionné, s'il le change pour tout le monde. Les variables statiques semblent être communes à tout le monde.

Je voudrais créer (à partir du code c #) une sorte de variable de session utilisée uniquement à partir du code c #, mais pas seulement à partir de la page, mais à partir de n'importe quelle classe.

13
Amaranth

Oui, les variables statiques sont partagées par l'ensemble de l'application, elles ne sont en aucun cas privées à l'utilisateur/session.

Pour accéder à l'objet Session à partir d'une classe non-page, vous devez utiliser HttpContext.Current.Session.

28
driis

GlobalVariable est un nom trompeur. Quel que soit son nom, ce ne devrait pas être static si c'est par session. Vous pouvez faire quelque chose comme ceci à la place:

// store the selected product
this.Session["CurrentProductId"] = productId;

Vous ne devriez pas non plus essayer de rendre la collection Session globalement accessible. Au lieu de cela, transmettez uniquement les données dont vous avez besoin et obtenez/définissez en utilisant Session le cas échéant.

Voici un aperçu de l'utilisation de stockage de session dans ASP .NET sur MSDN.

9
Yuck

Vous avez en quelque sorte répondu à votre propre question. Une réponse se trouve dans les variables de session. Dans votre classe GlobalVariable, vous pouvez placer des propriétés qui sont soutenues par des variables de session.

Exemple:

public string SelectedProductName 
{
    get { return (string)Session["SelectedProductName"]; }
    set { Session["SelectedProductName"] = value; }
}
8
Khan