¿Por qué lo haría ASP.NET MVC usar estado de sesión?


Recomendado por el ASP.NET equipo para usar caché en lugar de sesión, dejamos de usar sesión para trabajar con el modelo de formulario web en los últimos años. Así que normalmente tenemos la sesión apagada en la web.config

<sessionState mode="Off" />

Pero, ahora cuando estoy probando un ASP.NET La aplicación MVC con esta configuración arroja un error en la clase SessionStateTempDataProvider dentro del marco mvc, me pidió que activara el estado de la sesión, lo hice y funcionó. Mirando la fuente que usa session:

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

Entonces, ¿por qué ¿usan sesión aquí? ¿Qué me estoy perdiendo?

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

Editar Lo sentimos no significaba que este post debatiera sobre sesión vs. caché, sino más bien en el contexto de la ASP.NET MVC, me preguntaba por qué se usa session aquí. En esta entrada de blog también Scott Watermasysk mencionó que desactivar la sesión es una buena práctica, así que me pregunto por qué tengo que activarla para usar MVC de aquí en adelante.

Author: edymtt, 2008-12-22

4 answers

La sesión se utiliza para el almacén de TempData. TempData es una forma muy limitada de estado de sesión que durará solo hasta la siguiente solicitud de un determinado usuario. (Edit En MVC 2+, dura hasta la siguiente lectura.) El propósito de TempData es almacenar datos, luego hacer una redirección y tener los datos almacenados disponibles para la acción a la que acaba de redirigir.

Usar Session para el almacén de TempData significa que cualquier sistema de almacenamiento en caché distribuido que ya maneje Session funcionará para TempData. Evitar usar la sesión directamente cuando TempData lo hará tiene un par de ventajas. Una es que no tiene que limpiar la sesión usted mismo; TempData "expirará" por sí solo.

 33
Author: Craig Stuntz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-07 03:11:56

Recomendado por el ASP.NET equipo a utilizar caché en lugar de sesión

@ray247, podría proporcionar una referencia para esto? La sesión y la caché son diferentes por naturaleza y deben usarse dependiendo de los requisitos de la aplicación. Por ejemplo, almacenar datos específicos del usuario en la caché podría conducir a un comportamiento no deseado. Por supuesto, si realmente desea evitar el uso de session, podría proporcionar su propia implementación de la interfaz ITempDataProvider.

 13
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-22 19:56:01

Hmm... Puede ser que haya leído sobre la persistencia de los objetos pesados o objetos a los que se accede relativamente raramente - definitivamente es mejor ponerlos en caché, pero para los objetos ligeros o para los datos que se requieren en cada solicitud no hay mejor técnica que ponerlos en sesión.

Las sesiones no son malas si las usas correctamente.

 6
Author: maxnk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-22 19:54:28

Solo un pensamiento adicional. TempData tiene su propio propósito y MS sabía que habrá una escuela diferente de pensamientos con respecto al mecanismo persistente de TempData. Por lo tanto, de forma predeterminada hicieron que el almacén persistente fuera SessionState. Pero el diseño sigue siendo muy flexible. En función de las necesidades del proyecto y la gobernanza que lo guía, puede crear su propio proveedor de tempdata para satisfacer requisitos específicos.

Aquí hay algunos punteros a la recurso TempData

Aquí hay algunas mejoras adicionales en la implementación de TempData Mejoras de TempData

Aquí hay una implementación alternativa usando MS Velocity Distributed Caching. Proveedor de TempData de velocidad

 3
Author: rajesh pillai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-17 05:18:33