Comment accéder à des variables de session à partir de n'importe quelle classe de ASP.NET?
J'ai créé un fichier de classe dans le dossier App_Code dans mon application. J'ai une variable de session
Session["loginId"]
Je veux accéder à cette variable de session dans ma classe, mais quand je suis en train d'écrire la ligne suivante, puis il donne une erreur
Session["loginId"]
Quelqu'un peut me dire comment accéder à des variables de session dans une classe qui est créé dans le dossier app_code dans ASP.NET 2.0 (C#)
Vous devez vous connecter pour publier un commentaire.
(Mis à jour pour l'exhaustivité)
Vous pouvez accéder à des variables de session à partir de n'importe quelle page ou de contrôle à l'aide de
Session["loginId"]
et de toute la classe (par exemple, à partir de l'intérieur d'une bibliothèque de classe), à l'aide deSystem.Web.HttpContext.Current.Session["loginId"].
Mais s'il vous plaît lisez la suite pour ma réponse originale à cette question...
J'ai toujours utiliser une classe wrapper autour de la ASP.NET session de simplifier l'accès aux variables de session:
Cette classe de stockage d'une instance de lui-même dans le ASP.NET session et vous permet d'accéder aux propriétés de session dans un type de moyen sûr de toute la classe, de l'e.g comme ceci:
Cette approche a plusieurs avantages:
[Serializable()]
dans le cas où il doit être utilisé dans un proc session magasin?Accéder à la Session via les fils HttpContext:-
Le problème avec la solution proposée, c'est qu'il peut casser certaines des caractéristiques de performance intégré dans le SessionState si vous êtes en utilisant un processus de stockage de session. (soit "l'État du Serveur en Mode" ou "Mode SQL Server"). En programmation orientée objet, les modes de la session de données doit être sérialisé à la fin de la demande de page et désérialisé au début de la demande de page, ce qui peut être coûteux. Pour améliorer les performances de la SessionState tentatives pour seulement désérialiser ce qui est nécessaire par seulement désérialiser variable lorsqu'il est consulté la première fois, et il ne re-sérialise et remplace les variables qui ont été modifiés. Si vous avez beaucoup de variable de session et de les pousser tous dans une classe essentiellement, tout ce qui dans votre session sera désérialisé sur chaque demande de page qui utilise la session et tout devra être sérialisé à nouveau, même si seulement 1 propriété a changé parce que la classe a changé. Juste quelque chose à considérer si vous utilisez beaucoup de session et une oop mode.
Les réponses présentées avant le mien fournir apt solutions à ce problème, cependant, je pense qu'il est important de comprendre le pourquoi de cette erreur des résultats:
La
Session
propriété de laPage
renvoie une instance de typeHttpSessionState
par rapport à la demande en question.Page.Session
est en fait équivalent à l'appel dePage.Context.Session
.MSDN explique comment c'est possible:
Toutefois, Lorsque vous essayez d'accéder à cette propriété au sein d'une classe dans App_Code, la propriété ne sera pas disponible pour vous, à moins que votre classe dérive de la Classe Page.
Ma solution à ce souvent rencontré est le scénario que je n'ai jamais passer à la page des objets de classes. Je serais plutôt d'extraire les objets nécessaires à partir de la page de Session et de les transmettre à la Classe sous la forme d'un nom et d'une valeur de collection /Tableau /Liste, selon le cas.
J'ai eu la même erreur, parce que j'étais en train de manipuler les variables de session à l'intérieur d'une Séance personnalisée de classe.
J'ai dû passer le contexte actuel (système d'.web.httpcontext.actuel) dans la classe, et puis tout allait bien.
MA
Ce devrait être plus efficace à la fois pour l'application et aussi pour le développeur.
Ajouter la classe suivante de votre projet web:
Ici est la mise en œuvre:
Dans asp.net base cela fonctionne differerently:
Source: https://benjii.me/2016/07/using-sessions-and-httpcontext-in-aspnetcore-and-mvc-core/