36 votes

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

Pourquoi dit-on Nous ne devrions pas utiliser les 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 maintenir les valeurs entre les requêtes, comme les informations sur l'utilisateur connecté et certaines données pertinentes associées à son compte ?

C'est Darin La réponse de la Commission.

Pourquoi utilisez-vous HttpContext.Current dans une application ASP.NET MVC ? Ne l'utilisez jamais. C'est un mal, même dans les applications webforms classiques d'ASP.NET. classiques, mais dans ASP.NET MVC, c'est une catastrophe qui enlève tout le plaisir de ce joli framework web.

13 votes

Je n'ai pas dit que vous ne deviez pas utiliser Session (en fait, je l'ai dit et je le dis en ce moment même, mais pas dans la réponse à laquelle vous avez fait référence). J'ai dit que vous ne deviez pas utiliser HttpContext.Current pour accéder au contexte HTTP actuel.

0 votes

Voici un article qui explique l'une des raisons pour lesquelles l'utilisation de HttpContext.Current est une mauvaise idée - en fait, elle n'est pas thread safe : odetocode.com/articles/112.aspx

28voto

Robert Harvey Points 103562

L'un des principes fondamentaux des frameworks comme ASP.NET MVC est qu'ils sont apatride 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 une variable de session dans une application ASP.NET MVC, c'est un peu comme attacher une corne à la tête d'un cheval et l'appeler une licorne.

17 votes

Pouvez-vous répondre à cette partie de la question ? how will i maintain the values across requests ? Apparemment, je m'y prends très mal aussi...

1 votes

Stockez-les dans votre base de données. Vous devriez consulter les didacticiels disponibles à l'adresse asp.net/mvc surtout celui de NerdDinner.

1 votes

Le backing store dans mon cas particulier peut parfois être très très lent, et le frapper à chaque action ne va tout simplement pas fonctionner =/.

7voto

lawrab Points 133

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

Vous devriez 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'empêcher la corruption de l'état de la session, par exemple, les demandes Ajax multiples seront sérialisées à cause de cela. Plus d'informations aquí

Vous pouvez utiliser des alternatives pour faire persister les données entre les requêtes ; par exemple, vous pouvez utiliser la fonction CookieValueProvider qui fait partie de MVC Futures pour lier les données des cookies au modèle. Vous pouvez également faire persister les données dans le DOM actuel sous la forme de champs cachés, mais là encore, il convient de les réduire au maximum, car la taille des données se répercutera sur le trafic réseau en provenance et à destination du 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é.

0 votes

Ils synchronisent, pas sérialisent.

1 votes

La synchronisation des demandes parallèles entraîne une sérialisation (l'une après l'autre).

0 votes

Pour être clair, les événements sériels sont les uns après les autres. La sérialisation fait généralement référence au fait de prendre des données en mémoire et de les mettre dans un format qui peut être stocké sur le disque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X