2011-02-14 20 views
10

En el encabezado de cada página, se muestran los puntos de Nombre de usuario y Usuario. Esto se obtiene a partir de un parcial (que obtiene los puntos de la base de datos).cómo guardar detalles de usuario en un parcial en mvc

¿Cómo puedo almacenar en caché este parcial para que en cada página evite tener que verificar la base de datos para los puntos de los usuarios, y después de 24 horas pueda volver a buscar (caché caduque). Además, si el usuario cierra la sesión y alguien más inicia sesión, mostrará el nuevo nombre de usuario y los puntos (no el nombre previamente almacenado).

Respuesta

2

Esto es específico del usuario, así que lo almacenaría en una cookie persistente. Por lo tanto, cuando un usuario se autentica, puede consultar la base de datos para obtener la información requerida y emitir una cookie persistente que caducará en 24 horas. Luego, en el parcial, verificará si existe la cookie y obtendrá los datos necesarios de esta cookie y, si la cookie no existe, consulte la base de datos y vuelva a enviar la cookie. Cuando el usuario cierra la sesión, puede eliminar la cookie, aunque eso no es estrictamente necesario porque cuando vuelve a iniciar sesión (con el mismo u otro nombre de usuario) consultará la base de datos una vez más y volverá a enviar la cookie.

Y como vivimos en 2011 y HTML5 está llamando a nuestras puertas en lugar de cookies, probablemente use HTML5 Local Storage y, si el navegador no lo admite, recurrirá a las cookies.

0

¿Quiere decir: 'No quiero escribir el mismo código en cada acción para cargar mis datos de usuario y pasarlos a la vista, lo que en su lugar representaría una vista parcial'?

Si es así, que cambie su renderPartial a RenderAction y poner su lógica para obtener estadísticas de usuarios de db allí.

Pero este código se ejecutará cada vez que el usuario solicite la página.

Es posible que desee considerar poner los valores en HttpCache (http://msdn.microsoft.com/en-us/library/aa478965.aspx) para que no tenga que ir a db para cada solicitud.

+0

Esta es una forma de hacerlo. Para la acción dale un atributo 'OutputCache' que expira cada 24 horas y deberías establecerlo. –

1

Como mencionó Darin, el almacenamiento local puede ser una opción, pero las cookies son más compatibles y el mecanismo de reserva funcionaría con seguridad.

Sin embargo, dependiendo de lo que necesite almacenar, probablemente no desee almacenar ninguna información confidencial en una cookie o cualquier tipo de datos complejos, por lo que los datos en la cookie no se escalarán si comienza a agregar piezas adicionales de los datos que necesita para rastrear. Por lo general, solo uso cookies para descifrar algo que necesito consultar desde el db o un caché del lado del servidor.

Si el uso de un ORM, como NHibernate, el almacenamiento en caché explícita dentro de la aplicación probablemente no es algo que se tenga que preocupar enormemente a sí mismo con el que los datos se almacenan en caché por el proveedor de almacenamiento en caché de la ORM (opciones locales o distribuidos disponibles).

Como esto es específico del usuario, otra opción es almacenar esta información en el lado de la sesión del servidor cuando el usuario se autentica (que puede usar una cookie).

Cuestiones relacionadas