2011-06-28 13 views
5

Al construir un sitio web, uno tiene que decidir cómo almacenar la información de la sesión cuando el usuario inicia sesión.¿Cuáles son las ventajas y desventajas de almacenar datos de sesión en el archivo frente a la base de datos?

¿Cuáles son las ventajas y desventajas de almacenar cada sesión en su propio archivo en lugar de almacenarlo en una base de datos?

+1

Para que quede claro, un lenguaje como PHP sesión de tiendas en un archivo por defecto, dentro de/tmp. Sin embargo, estos archivos son administrados por el tiempo de ejecución, nunca debería tener que acceder a la sesión de la misma forma que accedería a un archivo. RoR usa una cookie por defecto, que de nuevo está basada en archivos, pero no se trata de esa manera. –

Respuesta

2

Por lo general, nunca almacenaría esta información en un archivo - se corre el riesgo de potencialmente intercambiar y guardar este archivo (sí, podría almacenarse en caché) pero preferiría usar un mecanismo de memoria diseñado como tal y entonces estás usando algo que es bastante no estándar. En ASP.Net

  1. se pueden utilizar en la colección en memoria que es bueno para su uso en un solo servidor. si necesita múltiples servidores web de carga equilibrada (granja de servidores web) y un usuario puede ir a cualquier otro servidor a medida que ingresan para cada solicitud, esta opción no es buena. Si el proceso web se reinicia, las sesiones se pierden. Ellos también pueden esperar.

  2. Puede usar un servidor de estado en asp.net para obtener acceso a múltiples servidores; esto se ejecuta fuera del proceso de su servidor web. Si el proceso web se reinicia, está bien y varios servidores tienen acceso a esto. Este tráfico que va al servidor de estado no está encriptado e idealmente usaría políticas IPSEC para asegurar el tráfico en un entorno más seguro.

  3. Puede usar el servidor sql para administrar el estado (automáticamente) al configurar el web.config para usar el servidor sql como su base de datos de sesión. Esto brinda la ventaja de una base de datos de alto rendimiento y acceso a múltiples servidores.

  4. Puede utilizar sus propias sesiones en una base de datos si los necesita para persistir a un largo tiempo fuera del mecanismo normal y desea tener un control más estricto sobre los campos de la base (tal vez usted desee consultar campos específicos)

También por curiosidad, ¿tal vez se está refiriendo a las sesiones como preferencias del usuario? En ese caso, investigue los perfiles de asp.net

+0

también ... ¿por qué preocuparse por los detalles aquí? Cada sistema tiene sus propios métodos incorporados; a menos que este sea un sitio en el que esté muy preocupado por el alto rendimiento, probablemente no notará la diferencia en los distintos mecanismos. –

1

Asp.net no facilita el almacenamiento de la sesión en un archivo, aunque no estoy seguro acerca de r-o-r. Sin embargo, almacenar la sesión en la memoria (del mismo proceso) es más rápido que tenerla en una base de datos. Tenerlo en una base de datos puede brindarle una mejor escalabilidad a su aplicación (en caso de que desee implementar su aplicación en un entorno de granja de servidores web, todos los servidores tienen un directorio común (db) para buscar la sesión).

This artículo de proyecto de código da muy buena idea de la gestión de sesiones asp.net.

1

Supongo que, basándose en sus preguntas anteriores, esto se solicita en el contexto del uso del módulo CGI :: Application de perl, con CGI :: Application :: Plugin :: Sesión. Si usa ese módulo con la configuración predeterminada, escribirá los datos de la sesión en archivos almacenados en el directorio/tmp, que es muy similar a lo que hace PHP. Si su aplicación se ejecuta en un entorno de alojamiento compartido, probablemente NO quiera hacer esto, por razones de seguridad, ya que otros usuarios pueden ver/modificar datos en/tmp. Puede solucionar esto escribiendo los archivos en un directorio que solo tiene permiso para leer/escribir (es decir, no/tmp). Durante el desarrollo, prefiero usar YAML para la serialización, en lugar de la configuración predeterminada (almacenable), ya que es legible por el ser humano. Si tiene su propio servidor web y puede ejecutar su servidor de base de datos (mysql) en la misma máquina, entonces almacenar los datos de la sesión en una base de datos en lugar de un archivo generalmente rendirá un mayor rendimiento, especialmente si puede para mantener una conexión de base de datos persistente (es decir, usando mod_perl o fastcgi).PERO - si su base de datos está en un servidor remoto, y usted tiene que abrir una nueva conexión cada vez que se necesita para actualizar los datos de sesión, entonces el rendimiento en realidad puede ser peor, y escribir en un archivo puede ser mejor. Tenga en cuenta que también puede usar sqlite, que parece una base de datos para su aplicación, pero que en realidad es solo un archivo en su sistema de archivos local. Independientemente de los resultados, la opción de base de datos puede ser indeseable en entornos de servidor compartido, debido a limitaciones de ancho de banda, y otras restricciones de recursos. La diferencia de rendimiento también es probablemente insignificante para un sitio de poco tráfico (es decir, unos pocos miles de visitas por día).

+0

Sí, eso es exactamente correcto =) me he fijado aquí y preguntándose cómo debo almacenar este. También soy un gran admirador de YAML. ¿Qué significa "serialización" en este contexto? Supongo que no usas YAML en lugar de una base de datos. Hechos muy útiles sobre archivos basados ​​en bases de datos! –

+1

datos de la sesión se almacena en una estructura de datos Perl (por lo general sólo un hash simple). Debe convertir esa estructura de datos en algo que pueda leer y escribir, ya sea en un archivo o en una base de datos. Eso es lo que significa la serialización. Si usa YAML, serialice los datos en una cadena de texto simple. El módulo "almacenable" almacena los datos en un formato binario más compacto. Es muy rápido y muy eficiente, pero no es muy portátil. Me he quemado en el pasado, por ejemplo, actualizando versiones, y descubriendo que la nueva versión no podía leer los datos escritos por la versión anterior. – scorpio17

+1

utilizo el serializador almacenable con MySQL para uso en producción. Sin embargo, al desarrollar algo nuevo, cambio a sesiones basadas en archivos y serializo con YAML, de modo que pueda ver fácilmente qué datos de la sesión se están almacenando. Hace que la depuración sea más fácil. El cambio de ida y vuelta es fácil con CGI :: Application. Controlo todo en un método cgiapp_init dentro de una clase base de la que derivan todas las clases de aplicaciones. – scorpio17

Cuestiones relacionadas