2012-04-16 9 views
32

¿Por qué se dice No deberíamos usar variables de sesión en las aplicaciones ASP.NET MVC? Me encontré con this answer que dice eso. En ese caso, ¿cómo mantendré los valores entre las solicitudes, como la información de usuario registrada y algunos datos relevantes asociados a su cuenta?¿Por qué la sesión es un desastre en la aplicación ASP.NET MVC?

Esta es la respuesta de Darin.

¿Por qué utiliza HttpContext.Current en una aplicación ASP.NET MVC? Nunca lo use. Eso es malo incluso en las aplicaciones web clásicas de ASP.NET , pero en ASP.NET MVC es un desastre que quita toda la diversión de este bonito marco web.

+13

No dije que no deberías usar Session (en realidad lo dije y lo digo ahora pero no en la respuesta a la que vinculaste). Dije que no deberías usar 'HttpContext.Current' para acceder al contexto HTTP actual. –

+0

Aquí hay un artículo que explica una razón por la que usar HttpContext.Current es una mala idea, básicamente no es seguro para subprocesos: http://odetocode.com/articles/112.aspx – JTech

Respuesta

27

Uno de los principios fundamentales de marcos como ASP.NET MVC es que son sin estado, al igual que la Web es. ASP.NET Web Forms es un intento de imitar un paradigma con estado sobre un entorno sin estado. It is a lie, en otras palabras.

Usar la variable de sesión en una aplicación ASP.NET MVC es como atar un cuerno a la cabeza de un caballo y llamarlo unicornio.

+16

¿Puede abordar esta parte de la pregunta? '¿cómo voy a mantener los valores entre las solicitudes'? Aparentemente estoy haciendo esto muy mal también ... – asawyer

+1

Guárdalos en tu base de datos. Debe revisar los tutoriales disponibles en http://www.asp.net/mvc, especialmente el de NerdDinner. –

+1

La tienda de respaldo en mi caso particular a veces puede ser muy lenta, y presionar cada acción simplemente no va a funcionar =/ – asawyer

5

Puede utilizar el estado de la sesión para conservar los datos, la funcionalidad TempData utiliza la sesión como predeterminada para conservar los datos.

Debe minimizar el uso de la sesión tanto como sea posible, la razón es que se realiza un bloqueo en la sesión para evitar que se corrompa el estado de la sesión, por ejemplo varias solicitudes Ajax se serializarán debido a esto. Más información here

Puede usar alternativas para conservar datos entre la solicitud, por ejemplo, puede usar el CookieValueProvider, que es parte de MVC Futures para vincular datos de cookies al modelo. También puede persistir los datos en el DOM real como campos ocultos, pero nuevamente se deben minimizar al máximo ya que el tamaño de los datos se reflejará en el tráfico de red hacia y desde el navegador.

Consideraría utilizar otro almacén de datos para su aplicación web si su tienda principal es lenta. Por ejemplo SQLServer CE o un RavenDB incrustado.

+0

Se sincronizarían sin serializar. – KingOfHypocrites

+0

Sincronización de solicitudes paralelas resultados en serialización (una detrás de otra) –

+0

Para ser claros, los sucesos en serie son uno tras otro, la serialización generalmente se refiere a cuando uno toma datos en la memoria y los pone en un formato que puede almacenarse en el disco. – mikeschuld

Cuestiones relacionadas