web-dev-qa-db-fra.com

Pourquoi ASP.NET MVC utiliserait-il l'état de session?

Recommandé par l'équipe ASP.NET d'utiliser le cache au lieu de la session, nous avons cessé d'utiliser la session de travailler avec le modèle WebForm ces dernières années. Nous avons donc normalement la session désactivée dans le web.config

<sessionState mode="Off" />

Mais maintenant, lorsque je teste une application ASP.NET MVC avec ce paramètre, il génère une erreur dans la classe SessionStateTempDataProvider à l'intérieur du framework mvc, il m'a demandé d'activer l'état de la session, je l'ai fait et cela a fonctionné. En regardant la source utilisée par la session:

// line 20 in SessionStateTempDataProvider.cs
Dictionary<string, object> tempDataDictionary = 
httpContext.Session[TempDataSessionStateKey] as Dictionary<string, object>; 

Alors, pourquoi utiliseraient-ils la session ici? Qu'est-ce que je rate?

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

Modifier Désolé ne voulait pas dire que ce post devait débattre de la session par rapport au cache, mais plutôt dans le contexte du MVC ASP.NET, j'étais juste se demandant pourquoi la session est utilisée ici. Dans ce article de blog Scott Watermasysk a également mentionné que la désactivation de la session est une bonne pratique, donc je me demande simplement pourquoi je dois l'activer pour utiliser MVC à partir d'ici.

33
Ray

La session est utilisée pour le magasin TempData. TempData est une forme d'état de session très limitée qui ne durera que jusqu'à la prochaine demande d'un certain utilisateur. ( Modifier Dans MVC 2+, il dure jusqu'à sa prochaine lecture.) Le but de TempData est de stocker des données, puis de faire une redirection et d'avoir les données stockées soient disponibles pour l'action vers laquelle vous venez de rediriger.

L'utilisation de Session pour le magasin TempData signifie que tout système de mise en cache distribué qui gère déjà Session fonctionnera pour TempData. Éviter d'utiliser Session directement lorsque TempData le fera présente quelques avantages. La première est que vous n'avez pas à nettoyer la session vous-même; TempData "expirera" de lui-même.

33
Craig Stuntz

Recommandé par l'équipe ASP.NET pour utiliser le cache au lieu de la session

@ ray247, pourriez-vous fournir une référence pour cela? La session et le cache sont différents par nature et doivent être utilisés en fonction des exigences de l'application. Par exemple, le stockage de données spécifiques à l'utilisateur dans le cache peut entraîner un comportement indésirable. Bien sûr, si vous voulez vraiment éviter d'utiliser session, vous pouvez fournir votre propre implémentation de l'interface ITempDataProvider.

13
Darin Dimitrov

Hmm ... Peut-être que vous avez lu sur la persistance des objets lourds ou des objets relativement rarement accessibles - il est certainement préférable de les mettre en cache, mais pour les objets légers ou pour les données requises à chaque demande, il n'y a pas de meilleure technique que mettez-les en session.

Les sessions ne sont pas mauvaises si vous les utilisez correctement.

6
maxnk

Juste une pensée supplémentaire. TempData a son propre objectif et MS savait qu'il y aurait une école de pensée différente en ce qui concerne le mécanisme persistant TempData. Donc, par défaut, ils ont fait du magasin persistant un SessionState. Mais le design est toujours très flexible. En fonction des besoins du projet et de la gouvernance qui le guide, vous pouvez créer votre propre fournisseur de données temporaires pour répondre à des exigences spécifiques.

Voici quelques pointeurs vers les ressources TempData

Voici quelques améliorations supplémentaires dans l'implémentation de TempData Améliorations de TempData

Voici une implémentation alternative utilisant la mise en cache distribuée MS Velocity. Fournisseur Velocity TempData

3
rajesh pillai