2010-07-11 9 views
7

Entonces, por ejemplo, el usuario está iniciando sesión, y el sistema está almacenando información sobre ellos ejemplo: birth date, ¿es más rápido obtener esta información de la sesión o consultar la base de datos para obtenerla?¿Son las sesiones más rápidas que consultar la base de datos?

Mi idea era que el usuario necesita iniciar sesión solo una vez y la sesión está siempre allí, pero si consulto la base de datos, si el usuario vuelve a cargar la página, el sistema necesita consultar una y otra vez, en lugar de los datos de un 'lugar' temporal.

Uso PHP y MySQL.

+0

¿Qué lenguaje de programación y dbms usa usted? –

+0

Edité mi respuesta. – Adam

Respuesta

9

Para casi cualquier idioma y base de datos, sí. Por lo general, una sesión de usuario se almacena en la memoria y obtenerla solo es cuestión de buscarla. Un acceso a la base de datos generalmente implica alguna comunicación de socket con un proceso diferente. Bastante pesado en comparación.

+2

Hasta donde yo sé, las sesiones en PHP se almacenan en archivos de forma predeterminada, no en la memoria. Para cada hit, este archivo de sesión debe leerse desde el sistema de archivos y analizarse en PHP Array. Tiene razón, la sesión debería ser más rápida, pero la razón es que tiene que cargar los datos de la sesión del usuario por otras razones y el birtday del que habla ya estará allí, no es necesario que pregunte en la base de datos. – dwich

1

¿Cómo lo hace todo? La forma de hacerlo es verificar las credenciales del usuario en la página de inicio de sesión y sí, debe realizar una consulta para verificar si los criterios especificados por el usuario coinciden en la base de datos. Si lo hacen, los guardas en sesión y luego continúas basados ​​en esa sesión.

Por lo tanto, no se trata de una comparación, tiene que hacer una consulta en la base de datos una vez en la página de inicio de sesión y usar sesión después.

página de entrada

// database query run once only at this page 
// if user exits, you store it into session else redirect with an error message 
+0

Sé cómo hacerlo, mi pregunta fue más rápida que la consulta de la base de datos o no :) – Adam

+1

@CIRK: Por supuesto, la sesión es más rápida, pero también debe tener en cuenta la seguridad. – Sarfraz

+0

Gracias la seguridad es un tema completamente nuevo, gracias por decirlo, creé una nueva pregunta échale un vistazo: http: //stackoverflow.com/questions/3224286/php-what-are-the-risks-of-php-sessions – Adam

0

En realidad, la respuesta de Carl no es totalmente correcto, y diciendo "MySQL" no ayuda tampoco.

Verá, los sistemas de bases de datos como mysql tienen "motores de almacenamiento". Estos generalmente escriben en archivos, pero hay algunos que escriben en la memoria (MEMORIA), otros escriben en la memoria pero mantienen una copia de seguridad de archivos (MyISAM) y algunos en/dev/null (BLACKHOLE).

Por lo tanto, todo depende del motor de almacenamiento:

  • MyISAM - Motor predeterminado en MySQL 3.23 con un gran rendimiento
  • MEMORIA - hash basado, almacenado en la memoria, útil para las tablas temporales
  • InnoDB - Soporta transacciones, el bloqueo de filas, y las claves externas
  • BerkeleyDB - Soporta transacciones y de nivel de página de bloqueo
  • BLACKHOLE -// dev motor de almacenamiento nula (todo lo que se escribe en él desaparece)
  • Ejemplo - motor de almacenamiento Ejemplo
  • ARCHIVO - motor de almacenamiento Archivo
  • CSV - motor de almacenamiento CSV
  • ndbcluster - agrupado,, tablas en memoria tolerantes a fallos
  • FEDERADOS - motor de almacenamiento Federados MySQL
  • MRG_MyISAM - Colección de tablas idénticas
  • ISAM - motor de almacenamiento obsoleto

(lista de la lista PhpMyAdmin Egines)

+0

así que si uso 'MEMORY', ¿funcionará como' SESSION'? – Adam

+0

esta "respuesta" es suplementaria en el mejor de los casos y no aborda la pregunta. – rvdavid

+0

@rvdavid - Responde a la pregunta, el OP solo tiene que elegir una opción. – Christian

Cuestiones relacionadas