41 votes

Est-ce une bonne pratique d'éviter d'utiliser le Session State dans ASP.NET MVC ? Si oui, pourquoi et comment ?

Ce n'est pas explicitement écrit quelque part mais je l'ai ressenti après avoir lu quelques blogs sur ASP.NET MVC. Je suis devenu curieux et j'ai pensé à le demander ici.

UPDATE :
Je ne m'interroge pas sur les problèmes de mémoire/stockage/RAM sur le serveur. Pour eux, il existe une solution pour stocker la session en dehors du processus. Je le sais. Je suis curieux de savoir s'il existe des scénarios dans lesquels nous devions utiliser la session dans WebForms, mais que nous pouvons éviter maintenant dans MVC, en profitant de la belle méthode structurée offerte par MVC ?

44voto

Tragedian Points 12308

Dans les formulaires Web ASP.NET, le passage d'informations entre différentes pages n'a jamais été particulièrement facile sans l'utilisation de la session. En raison du modèle centré sur le postback, les informations étaient disponibles sur le serveur dans le cadre d'un événement, mais souvent dans la mauvaise page pour afficher un résultat, ce qui rendait nécessaire le passage d'informations entre les pages.

Cela a conduit à une utilisation excessive de la session, en remplissant des variables "current" dans la session destinées à indiquer l'objet actuel avec lequel on interagit. Cette surutilisation rendait à son tour les applications très dépendantes de l'état et beaucoup plus difficile de déterminer le comportement attendu ("Cette variable est-elle remplie ?" "Ai-je déjà l'ID de la commande en cours ?").

MVC est structuré autour de l'idée que votre site web est une vue sur un modèle logique d'informations. Il encourage à avoir apatride grâce à l'utilisation de contrôleurs simples répondant aux actions avec des informations clés transmises dans le cadre de la requête HTTP.

En raison de ces propriétés, la session n'est plus nécessaire pour effectuer des tâches de base dans MVC, et devient un mauvais ajustement là où elle semblait un choix parfaitement valable auparavant.


Fondamentalement, La session pollue HTTP . Il rend les requêtes (contenant souvent leur propre état) dépendantes de l'état interne du serveur récepteur. C'est pourquoi il est considéré comme un mal (bien qu'il soit souvent pratique et nécessaire).

16voto

Paolo Falabella Points 10514

La session était évitée même avant MVC, car il s'agit d'informations qui sont conservées sur le serveur pour chacun des utilisateurs qui se connectent à votre application et (contrairement au cache) ne sont pas effacées automatiquement lorsqu'elles ne sont pas utilisées.

Toujours dans le but de vous aider à éviter d'utiliser la session, ASP.NET disposait du viewstate, qui était en fait un énorme champ caché dans vos formulaires web qui était envoyé à chaque postback. Ce système s'est avéré trop lourd pour diverses raisons et a été abandonné avec MVC.

Ainsi, la session est en fait quelque chose qui n'était pas très recommandé même avant MVC. La raison en est principalement l'évolutivité. Moins vous faites persister d'état, plus votre site sera évolutif. Si vous ne vous souciez pas de l'évolutivité (pour ce que j'en sais, vous pourriez développer une application intranet pour 200 utilisateurs) ou si vous avez très peu d'informations à faire persister, vous pouvez utiliser la session. Dans d'autres cas, l'utilisation de la session est tout à fait appropriée : un scénario typique où l'état de la session est utilisé est le panier d'un site de commerce électronique (information qui est par nature par utilisateur et par session et que seul un pourcentage de vos utilisateurs a effectivement rempli).

En ce qui concerne les alternatives, il n'y a pas de remplacement direct et immédiat de la session. Selon ce que vous essayez de faire, vous pouvez utiliser le cache ou les cookies. MVC n'a rien apporté de particulièrement nouveau à cet égard, AFAIK.

6voto

Josh Pearce Points 2288

Qu'est-ce que cela signifierait pour vous d'éviter d'utiliser l'état de session ? Avez-vous besoin de stocker de manière pratique de petites quantités de données utilisateur entre les requêtes ? Si oui, comment le feriez-vous autrement ?

Je ne sais pas quelles seraient vos alternatives à l'État de la session. Il est beaucoup plus souhaitable d'utiliser le Session State tel qu'il existe, tel quel, dans ASP.NET que de créer votre propre alternative, surtout du point de vue de la sécurité.

6voto

smartcaveman Points 15610

Utilice TempData au lieu de HttpSessionState . TempData est l'enveloppe de Mvc pour l'état de la session.

1voto

Morgan Herlocker Points 571

Cela dépend vraiment de la quantité de données que vous conservez dans l'état de la session. En règle générale, j'essaie de ne l'utiliser que pour quelques chaînes de caractères ici et là, et pas beaucoup plus. Pour un grand formulaire, par exemple, je pourrais stocker un ID de référence pour cette session, puis stocker toutes les données nécessaires dans des tables temporaires SQL basées sur cet ID. C'est un peu pénible, mais l'état de la session n'est pas destiné à être utilisé pour stocker des tas d'informations.

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