2010-07-28 15 views
6

Estoy trabajando con una aplicación asp.net que almacena la mayoría de los datos en una base de datos y no la sesión. Me pregunto cuáles son los pros y los contras de cada uno y cuál es la mejor manera de hacerlo. Por ejemplo, tiene un sitio bastante ocupado y en lugar de almacenar variables específicas del usuario en sesión, hay una tabla de DB llamada datos de usuario y puede almacenar todos los datos específicos del usuario a los que se puede acceder desde cualquier página consultando la base de datos. ¿Cuál es la mejor manera de ir, sesión o base de datos?Almacenamiento de variables de usuario en la base de datos frente a la sesión en asp.net

Respuesta

2

Pregunta interesante. Si se trata de datos que no son importantes en todas las sesiones (por ejemplo, la última página vista) -> sesión. Si se trata de datos que deberían ser persistentes (por ejemplo, contraseña) -> base de datos. El caso interesante y el que probablemente se refiera: Datos que deberían ser persistentes pero que también se usan a menudo (por ejemplo, el nombre de usuario). A partir de esto, tiendo a copiar esos valores del DB en la sesión que me permite trabajar sin acceso a la base de datos en páginas con tareas triviales.

3

Cualquier cosa almacenada en estado de sesión se desvanecerá cuando se reinicie AppDomain.

Puede evitar eso usando un controlador de estado de sesión fuera de proc, pero eso no es mejor que una base de datos.

3

sesión (pero depende mucho de la configuración de la sesión):

  • No hay acceso a la base de datos, o menos.
  • Almacenamiento temporal: puede perder la información, al menos cuando finaliza la sesión.
  • Quizás algún problema de seguridad, dependiendo de dónde almacene la información de la sesión
  • No compartido: puede tener problemas si está usando una granja de servidores, un servidor puede no tener acceso a la otra sesión del servidor.
  • Puede no funcionar si el cliente deshabilitó las cookies.

Base de datos:

  • tráfico de base de datos para cada devolución de datos si necesita la información en cada página.
  • Almacenamiento permanente.
  • No hay información almacenada con el cliente (cookies ...).
  • Compartido: datos accesibles desde cualquier servidor de una granja de servidores web.

Tenga en cuenta que puede almacenar información de sesión en la base de datos. Es por eso que uso la palabra "puede" en la parte de la sesión. Ver here some session configuration and possibilities

2

En muchos casos, utilizo Session para almacenar datos temporales sobre ... bueno ... "sesión". En ASP.NET, la sesión es configurable. Puede usar in-proc (predeterminado) que usa la memoria del servidor. También puede configurar la sesión para utilizar una base de datos o una herramienta de gestión de sesiones (en caso de que la memoria del servidor sea un problema o se mueva a un entorno de clúster/granja).

La sesión está destinada a ser temporal. Esto es genial cuando realmente está almacenando datos sobre el usuario que está utilizando su aplicación en ese momento. Cuando el usuario abandona la aplicación y su sesión expira, la memoria se libera. No tiene que borrar nada manualmente.

Session usa la memoria del servidor. Siempre que tenga suficiente memoria y no esté en un clúster de servidor, esto funciona muy bien.La memoria es rápida, por lo que obtener y establecer datos en sesión es muy rápido y utiliza un ancho de banda de red cero.

He dicho todo eso, en algunas de mis aplicaciones, tengo la sesión configurada para usar SQL. Básicamente es lo mismo que usar la base de datos directamente, pero no tengo que lidiar con DAL ... solo deje que el framework funcione para usted.

Cuestiones relacionadas