Je suis nouveau sur ASP.NET MVC. J'ai déjà utilisé PHP et il était facile de créer une session et de sélectionner des enregistrements d'utilisateurs en fonction des variables de session actuelles.
J'ai cherché partout sur Internet un didacticiel simple étape par étape qui peut me montrer comment créer et utiliser des sessions dans mon application C # ASP.NET MVC 4. Je souhaite créer une session avec des variables utilisateur auxquelles je peux accéder de n'importe où dans mes contrôleurs et pouvoir utiliser les variables dans mes requêtes LINQ.
asp.net-mvc
session
asp.net-mvc-4
session-variables
Thuto Paul Gaotingwe
la source
la source
Réponses:
Essayer
la source
WebSecurity.CurrentUserId
sorte qu'elle ne la tire pas de la base de données plusieurs fois (j'ai trouvé que c'était très coûteux)?Account/LogOn
àHome/Index
,Session["FirstName"]
c'estnull
. Les développeurs doivent créer un contrôleur parent (BaseController
) et définir un champ protégé (internal protected HttpSessionStateBase SharedSession
) qui peut exposer la variable Session partagée dans tous les sous-contrôleurs (cela suppose que tous vos contrôleurs d'application héritent duBaseController
)En raison de la nature sans état du Web, les sessions sont également un moyen extrêmement utile de persister des objets à travers les demandes en les sérialisant et en les stockant dans une session.
Un cas d'utilisation parfait de ceci pourrait être si vous avez besoin d'accéder à des informations régulières dans toute votre application, pour enregistrer des appels de base de données supplémentaires à chaque demande, ces données peuvent être stockées dans un objet et non sérialisées à chaque demande, comme ceci:
Notre objet réutilisable et sérialisable:
Cas d'utilisation:
Une fois cet objet sérialisé, nous pouvons l'utiliser sur tous les contrôleurs sans avoir besoin de le créer ou d'interroger à nouveau la base de données pour les données qu'il contient.
Injectez votre objet de session à l'aide de l'injection de dépendances
Dans un monde idéal, vous `` programmez sur une interface, pas une implémentation '' et injectez votre objet de session sérialisable dans votre contrôleur en utilisant votre conteneur Inversion of Control de votre choix, comme ceci (cet exemple utilise StructureMap car c'est celui avec lequel je suis le plus familier ).
Vous enregistrerez alors ceci dans votre
Global.asax.cs
dossier.Pour ceux qui ne sont pas familiarisés avec l'injection d'objets de session, vous pouvez trouver un article de blog plus détaillé sur le sujet ici .
Un mot d'avertissement:
Il convient de noter que les sessions doivent être réduites au minimum, de grandes sessions peuvent commencer à causer des problèmes de performances.
Il est également recommandé de ne pas y stocker de données sensibles (mots de passe, etc.).
la source
Voici comment l'état de session fonctionne dans ASP.NET et ASP.NET MVC:
Vue d'ensemble de l'état de session ASP.NET
En gros, vous faites ceci pour stocker une valeur dans l'objet Session:
Pour récupérer la valeur:
la source
Account
àHome
, Session ["FirstName"] est nulle. Les développeurs doivent créerBaseController
et définir un champ protégé (internal protected HttpSessionStateBase SharedSession
) qui peut exposer laSession
variable partagée dans tous les sous-contrôleurs (cela suppose que tous vos contrôleurs d'application héritent duBaseController
)Vous pouvez stocker tout type de données dans une session en utilisant:
Cette variable durera environ 20 minutes.
la source
U peut stocker n'importe quelle valeur dans la session comme Session ["FirstName"] = FirstNameTextBox.Text; mais je suggérerai que vous preniez comme champ statique dans le modèle, attribuez-lui une valeur et vous pourrez accéder à cette valeur de champ n'importe où dans l'application. Vous n'avez pas besoin de session. la session doit être évitée.
sur le contrôleur - Employee.FullName = "ABC"; Maintenant, vous pouvez accéder à ce nom complet n'importe où dans l'application.
la source