sql >> Base de Datos >  >> RDS >> Mysql

Variables de sesión:¿Cuántos datos son demasiados?

En primer lugar, las sesiones de PHP no se almacenan en la memoria de forma predeterminada , se almacenan en el disco, por lo que cada bloque/sesión en la que escriba ocupará espacio en el disco y no en la memoria (hasta que use PHP para leer los datos de la sesión).

Sí, es posible que esté siendo más eficiente, pero no si quiere escalar y he aquí por qué:


Almacenamiento de datos en sesiones

Es perfectamente aceptable almacenar algunos datos en sesiones. Teóricamente, no hay límite (aunque nunca he intentado romperlo o incluso presionarlo, solo muévase a una solución más eficiente). Sin embargo, estará limitado por el espacio en disco y PHP memory_limit() .

A menudo, los datos almacenados en sesiones incluyen cosas como:

  • Nombres de usuario
  • Hashes
  • Fechas de registro
  • Otras variables (identificadores/claves de grupos de usuarios, etc.)
  • Mensajes flash
  • (¡NO contraseñas!)

Sin embargo, hay una compensación. Si su tráfico (y uso) aumenta y está almacenando una gran cantidad de datos en $_SESSION , es muy probable que empieces a ver problemas, tanto en términos de uso del disco como de la memoria.

No creo que haya ningún problema con lo que está sugiriendo, pero más allá de los elementos que ha enumerado y donde los ejemplos anteriores se superponen, se requiere cuidado.

Si desea escalar (horizontalmente) y retener sesiones basadas en disco, tiene opciones ( sesiones pegajosas o la red de área de almacenamiento son un par) ya que el disco en un servidor no almacena las mismas sesiones que un disco en otro servidor.


Ubicación de datos de sesión

Puede encontrar la ubicación donde PHP almacena los datos de la sesión llamando a: session_save_path()

o en la CLI:

php -r 'echo session_save_path(), "\n";'

No ha mencionado su sistema operativo, pero las ubicaciones comunes para los archivos de sesión (en diferentes tipos de sistemas operativos) son:

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Las sesiones almacenadas en el disco generalmente tienen nombres de archivo que se ven así usando ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Vale la pena señalar que a menudo hay procesos de recolección de basura que limpian las sesiones inactivas después de períodos específicos. Varía según el sistema operativo, pero generalmente están presentes con varias instalaciones basadas en LAMP.


Otras opciones/enfoques de almacenamiento de sesiones

En su base de datos
Los datos de la sesión a menudo se almacenan en una base de datos en lugar de en un disco local y esto funciona bien para sitios micro, pequeños y (dependiendo de cómo se haga) medianos con un nivel razonable de tráfico.

Como cualquier otra solución, tiene sus ventajas y desventajas (como poder prohibir/expulsar a un usuario ejecutando una consulta en lugar de eliminar un archivo de sesión de /tmp )

En la memoria
para sitios más grandes (con mayor tráfico) y particularmente donde el volumen de usuarios simultáneos es alto, la memoria es más rápida de leer/escribir para variables o datos a los que se accede con mucha frecuencia en lugar de agregar una carga indebida a su base de datos. Puede y debe escribirse en la base de datos (consulte caché de escritura simultánea ), pero también se mantendrá en la memoria para un acceso eficiente.

Una técnica de particular mérito es el almacenamiento en memoria caché . Un ejemplo de solución de código abierto compatible con PHP ampliamente utilizado es Memcached , que se puede usar en un servidor o en muchos [distribuidos]. Lo he visto usado tanto por empresas pequeñas como grandes y solo hay que mirar quién lo usa/contribuye...