web-dev-qa-db-fra.com

Pourquoi la session est un désastre dans l'application ASP.NET MVC?

Pourquoi est-il dit Nous ne devrions pas utiliser de variables de session dans les applications ASP.NET MVC ? Je suis tombé sur cette réponse qui le dit. Dans ce cas, comment vais-je conserver les valeurs pour les demandes telles que les informations de l'utilisateur connecté et certaines données pertinentes associées à son compte?

C'est la réponse de Darin .

Pourquoi utilisez-vous HttpContext.Current dans une application ASP.NET MVC? Ne l'utilisez jamais. C'est mal même dans les applications Webforms ASP.NET classiques, mais dans ASP.NET MVC, c'est un désastre qui retire tout le plaisir de ce cadre Web Nice.

35
Happy

L'un des principes fondamentaux des frameworks comme ASP.NET MVC est qu'ils sont sans état , tout comme le Web. ASP.NET Web Forms est une tentative d'imiter un paradigme avec état sur un environnement sans état. C'est un mensonge , en d'autres termes.

Utiliser la variable Session dans une application ASP.NET MVC, c'est un peu comme attacher un cor à la tête d'un cheval et l'appeler Licorne.

28
Robert Harvey

Vous pouvez utiliser l'état de session pour conserver les données, la fonctionnalité TempData utilise Session par défaut pour conserver les données.

Vous devez minimiser l'utilisation de la session autant que possible, la raison en est qu'un verrou est pris sur la session pour toutes les demandes afin d'éviter la corruption de l'état de la session, par exemple, plusieurs demandes Ajax se sérialiseront à cause de cela. Plus d'informations ici

Vous pouvez utiliser des alternatives pour conserver les données entre les requêtes, par exemple, vous pouvez utiliser CookieValueProvider , qui fait partie de MVC Futures pour lier les données des cookies au modèle. Vous pouvez également conserver les données dans le DOM réel en tant que champs masqués, mais encore une fois, celles-ci doivent être minimisées autant que possible car la taille des données sera reflétée dans le trafic réseau vers et depuis le navigateur.

J'envisagerais d'utiliser un autre magasin de données pour votre application Web si votre magasin principal est lent. Par exemple, SQLServer CE ou un RavenDB intégré.

7
lawrab