2010-02-15 6 views
14

Recibí la vibración utilizando la variable de sesión como algo despreciado en ASP.NET MVC.asp.net mvc - donde almacenar ID de usuario - entero?

Una vez que un usuario entra, me gustaría retener ID de usuario del usuario de modo que yo no tengo que consultar todo el tiempo, etc.

¿Cuál es la forma más eficaz de hacerlo en ASP.NET MVC ?

Respuesta

18

He visto aparecer preguntas similares de vez en cuando y no puedo entender de dónde viene esta "vibra". Para eso está específicamente diseñada la sesión: para almacenar información relacionada con la sesión. No hay absolutamente nada de malo en usar Session para almacenar una identificación de usuario o información similar.

+0

¡Gracias! * relleno de comentarios *. –

+2

La vibración proviene de personas que utilizan incorrectamente Session as Authentication, que es exactamente lo que Progtick está haciendo. – jfar

+1

Pensé que el proveedor de Membresía/Perfil manejó todo esto por usted, y Microsoft lo recomienda. Incluso incluyen un ejemplo en la aplicación de muestra. –

0

Estado de la sesión. No debería usarlo cuando no sea apropiado. Pero nada más funciona para las credenciales. Solo asegúrate de que sean serializables, para que puedas sacar la sesión del proceso cuando lo necesites.

+1

"Pero nada más funciona para credenciales" ¿Qué? Al igual que las cookies y FormsAuthentication? Las cookies son un 1000% más estables que la sesión. – jfar

+0

¿Por qué no puede simplemente verificar una sesión y hacer que el usuario inicie sesión de nuevo si no está disponible? No entiendo por qué las cookies son mejores. –

+0

Y no estoy discutiendo, realmente me gustaría saber más sobre esto. –

2

Las sesiones están destinadas a ser utilizadas para la interacción con el estado, un carrito de compras viene a la mente. Son menospreciados porque son dolorosos de probar y tienden a forzar la lógica de serialización en el controlador. Si solo quiere minimizar las consultas, debe usar el almacenamiento en caché.

EDITAR: Los tutoriales para HttpContext.Cache son sorprendentemente difíciles de conseguir. Steven Sanderson tiene ~ 4 páginas en Pro ASP.net MVC Framework (Apress 2009) p. 530-534.

Caching in asp.net-mvc podría darle algunas sugerencias también.

+0

puede publicar un enlace a asp.net mvc caching? – TPR

8

Tienes la vibra correcta. Simplemente no es necesario en muchos escenarios. El estado de la sesión se puede perder fácilmente y se usa incorrectamente para manejar el usuario conectado (la configuración de que el usuario está conectado se realiza configurando Session ["IsLoggedIn"] = true o marcando Session ["User"]! = Null, de repente Session desaparece y el usuario está desconectado), cuando se debe usar la autenticación de formularios. Aquí se puede leer acerca de la autenticación de formularios y almacenar datos adicionales con ella:

Forms Authentication Configuration and Advanced Topics

Si aún desea utilizar la sesión, es bueno para crear envoltorio para que sea más comprobable y deshacerse de las cadenas de código:

Wrapper for ASP.NET Session

+0

¿No usaría auth de formularios y luego almacenaría el nombre de usuario, etc. en la sesión? –

+1

@ d03boy: el nombre de usuario se almacena en la cookie de autenticación de formularios de forma predeterminada.Puede agregar la identificación del usuario. Si pierde sesión (y puede suceder en muchas situaciones, por ejemplo, cuando alguien cambia web.config), tiene sus datos en un lugar seguro y no tiene que reconstruirlos. De acuerdo, puede usar la sesión, pero recuerde que puede perderse cuando el usuario inicie sesión. – LukLed

Cuestiones relacionadas