Est-il de meilleures pratiques et de l'alternative recommandée pour les variables de Session dans MVC

Bon, alors tout d'abord avant que quelqu'un ne tente de faire une détermination que c'est un "double" question; j'ai étudié la plupart des messages sur DONC en ce qui concerne des questions similaires, mais même dans l'ensemble de tout ce qui a été dit, je suis encore un peu un dilemme quant à l'définitif ou peut-être devrais-je dire à un accord unanime sur ce.

Je peux cependant dire que j'ai (basé sur les poteaux) déterminer de façon concluante que la réponse est basée sur la portée de l'obligation. Mais même en tenant compte de cela, les opinions semblent trop complexes pour moi de prendre une décision quant à savoir comment je dois gérer cela.

Mon besoin immédiat est que j'ai besoin de persister les données de la variable à partir de 1 contrôleur à travers de nombreux points de vue. Plus précisément, j'ai un contrôleur et la vue correspondante qui gère le panier le nombre d'éléments et je voudrais persistent que les données à travers de multiples points de vue. Je pense que le _layout point de vue est le choix le plus logique pour cela.

Maintenant, j'ai réussi à accomplir cette tâche en assignant la valeur d'une variable de Session qui est extrait de mon _layout vue; ainsi, même lorsque l'utilisateur pour naviguer n'importe où à l'intérieur du site, le nombre d'articles dans le Panier va persister jusqu'à ce qu'ils quittent le site ou la validation de votre commande; dans ce cas, la variable sera effacé dans le code.

Les postes que j'ai lu semble biaisé à rester à l'écart de variables de Session en faveur de Cookies et de stockage des données dans une base de données ou en indiquant que pour le but pour but que je me propose de les utiliser, les variables de Session sont parfaitement bien à utiliser.

L'autre chose que j'ai lu suggère que les variables de Session peuvent potentiellement entraver la performance globale si il y a un trafic élevé sur le site étant donné que l'information est stockée sur le serveur.

Personnellement, je ne peut pas justifier le stockage de ce type d'information dans une base de données et ensuite frapper la base de données que j'imagine que cela pourrait également affecter les performances du site et il semble un peu exagéré pour le stockage de données temporaires. TempData, ViewData et ViewBag ne fonctionnent pas dans la persistance des données, de sorte qu'ils ne sont pas choix logique pour l'exigence de l'OMI.

Si il y a un autre bien adapté alternative à la variable de Session (qui travaille pour moi) je voudrais savoir ce que c'est.

De 2 messages qui semblent contradictoires dans l'effort de fournir les meilleures recommandations laissez-moi un peu confus.

Contre: Est-ce une bonne pratique pour éviter d'utiliser de l'État de Session dans ASP.NET MVC? Si oui, pourquoi et comment?

Pour: Toujours ok pour utiliser des variables de Session dans ASP.NET mvc, ou est-il une meilleure alternative pour certaines choses (comme un panier)

Semble que cette question (bien que présentés dans de nombreuses variantes) n'a pas de réponse définitive que je peux conclure.

Si il est plus préférable pour ce faire, sans exagéré, alors que c'est la réponse que je suis à la recherche d'.

J'ai lu quelque part l'utilisation de MVC filtres en tandem avec le Global.ascx démarrage de l'application de la section en tant que bien, mais cela ne semble pas approprié pour les variables définies au niveau du contrôleur autant que peut-être, les variables statiques.

Quelqu'un peut peut-être squash (par manque d'un meilleur mot) le grand nombre d'opinions diverses sur le sujet et peut-être donner plus de réponse définitive à la question? Je suis sûr que la diversité des opinions ont leur place et je ne suis pas tenter de les discréditer. Mais ayant un caractère définitif, et éventuellement de réponse unanime serait mieux; ensuite, j'ai pu faire le tri entre les messages d'autres afin de déterminer ce qui est le mieux pour mon application.

Bien sûr, si cette question n'a pas de réponse définitive; dites-le moi et je vais tenter de dériver ma propre réponse à partir des autres postes.

Grâce

===========================================================

MISE À JOUR DE LA RÉPONSE AUX RÉPONSES FOURNIES

La mise en cache et les Cookies semblent être une préférence générale à partir des réponses mais j'ai aussi pris note de la déclaration que la mise en cache pas un candidat idéal pour une utilisation sur plusieurs serveur web parce que la synchronisation peut être un problème potentiel.

De donner du crédit à Tim, il a déclaré que la Base de données de stockage est optimisé et les utilisateurs ont la possibilité de revenir à un moment plus tard et continuer là où ils l'avaient laissé.

Qui est un excellent point, mais en gardant la prospective sur les probabilités, il est probable raisonnable étant donné que certains utilisateurs ne peuvent pas retourner en laissant inutile de données dans la base de données.

Donc garder l'DB optimisé et propre (ce qui "me" est d'égale pertinence) nécessiterait la mise en œuvre d'une tâche de maintenance expire automatiquement ces enregistrements en fonction d'un seuil fixé de temps pour tenir compte de ces circonstances. Bien qu'une tâche de maintenance n'est pas une incontestable option, je pense toujours que cela ajoute juste un peu plus de travail à la tâche tout simplement de l'intention qui servait de stockage temporaire.

Néanmoins, je ne l'égard de Tim recommandation et nous croyons qu'il mérite le mérite sur la lutte contre mon avis initial à un diplôme; qu'une base de données ne semble pas être une option viable pour le stockage Temporaire de données; donc je pense que le compromis serait de stocker les données dans une base de données (dans le scénario d'un Panier d'achat ou similaire) peut-être qu'après une extraction. De cette façon, comme vous l'avez dit précédemment, les données peuvent être constamment suivis lors de visites ultérieures si vous avez un enregistrement des transactions. Mais plus important encore, il serait de données de ces transactions à avoir une véritable pertinence de persister à la base de données.

Il a également été indiqué que, bien que la Session est plus rapide que la Base de données; mais malgré avoir ses avertissements qui peuvent dans une certaine mesure atténué par d'autres mécanismes comme levier de la SessionStateBehavior attribut, que de servir comme un exemple.

... MAIS je crois que Erik type de conduit au point de départ avec le Dunning-Kruger Effet. Même si, du contenu et des explications pour des propositions de réponses ici; je doute sérieusement de l'expertise de l'une des personnes qui ont répondu est de toute façon discutable. Néanmoins, j'ai tendance à être d'accord sur le fait d'obtenir un avis unanime peut être un peu plus élevé que l'attente raisonnable de ma part.

Ce que j'ai été plus spécifiquement à la recherche d'un consensus général pour une technique qui permettrait d'accueillir confortablement un grand nombre de scénarios. En d'autres termes, quelque chose qui pourrait l'accueillir, non seulement mon scénario en particulier, mais aussi de fournir l'élément d'évolutivité pour les plus grands environnements potentiellement plus lourds de la circulation. De cette façon, un changement dans la programmation serait atténué tout à fait ou minime, au mieux.

==================================================

Résumé sur la base des commentaires:

  1. Les variables de Session semblent accueillir les petits scénarios et, le cas échéant, mais ils ont un certain potentiel de persistance des inquiétudes parmi les autres notables divergences comme l'a déclaré très thorougly par Erik. Ainsi, cette option ne sera évidemment pas s'adapter à un modèle évolutif.

  2. La mise en cache est préférable par rapport à des variables de Session mais encore une fois pas impérativement le "meilleur" évolutive option en raison, entre autres, le potentiel de synchronisation de complexités dans le serveur web de la ferme des environnements comme on l'a déjà souligné. Mais une option néanmoins.

  3. Stockage de base de données est évolutive mais pour l'intention le but de temporaire de stockage volatile est probablement pas le plus élégant de l'option à partir d'une base de données de point de vue, car cela nécessiterait de périodiques de nettoyage. Personnellement, avoir une base solide dans les concepts de base de données plus tôt dans ma carrière, c'est probablement ne va pas être quelque chose que beaucoup de développeurs sera sans doute d'accord avec, mais à l'aide de la base de données à cette fin peut suffire pour le Développement Web à partir d'un des programmeurs de point de vue; cependant, du point de vue de la DAL et de la DB de développement de la ce (pour moi) a le potentiel pour mandater une supplémentaire DB tâche de mettre en œuvre un efficace backend.

  4. Cookies semblent être une option agréable d'avoir le combiné "souhaitable" éléments variables de Session et la mise en cache.

==================================================

CONCLUSION

Sur la base des réponses; je pense que les COOKIES et le CACHE semblent généralement bien arrondi propositions pour des meilleures pratiques à travers le conseil d'administration en combinaison avec la base de données de stockage lors de la persistance est nécessaire après le fait; comme potentiellement de bons candidats pour l'évolutivité de ceux présentés.

Le choix ultime entre les 2 semble être basée sur la quantité et le type de données nécessitant de stockage (par exemple, sensibles vs non-sensibles et si oui ou non il y a aucun souci que le client peut modifier les données de leur fin); en plus des considérations spéciales pour les COOKIES dans le fait qu'ils peuvent être désactivés par les clients.

Évidemment, il n'existe pas de solution unique pour tous comme l'a clairement souligné et en a conclu que les réponses fournies, mais en termes d'évolutivité; j'ai peut-être tort, mais ils semblent être le MEILLEUR choix disponible.

Parce que toutes les réponses sont bonnes, je suis assez d'aller à crédit tous les postes utile et va accepter d'Erik répondre en tant que bien arrondi globale d'une solution évolutive. Je souhaite que je pourrais sélectionner plus d'une réponse que je crois à la Tim de réponse a également été très bien préparé et concis.

Gupta réponse a été bon aussi, mais je voulais plus de l'élaboration de la réponse proposée et non pas une répétition de messages précédents.

Merci Les Gars!

  • J'aime bien cette question, bien qu'il pourrait être plus adaptée à Programmeurs.
  • Merci, c'était vraiment utile pour moi comme je suis actuellement umming et aaahing sur la question de stocker une valeur unique dans une session,cookie ou autre chose. Dans mon cas, lorsqu'un utilisateur se connecte sur mon site, ils sont retournés non identifiable valeur qui a besoin de la persistance à un non-intensif site.
  • Une autre solution possible, ce qui est plus possible aujourd'hui qu'elle ne l'était lorsque cette question a été posée la première fois, est HTTP 5 local de stockage. C'est maintenant beaucoup plus largement pris en charge (bien que vous pouvez toujours courir dans des problèmes avec certains navigateurs mobiles, et bien sûr, les gens toujours très vieux navigateurs de bureau).
InformationsquelleAutor Mark | 2014-05-02