start session_destroy sesion pasar paginas entre ejemplos ejemplo cerrar _session php mysql session-variables

php - sesion - session_destroy



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

Algunas de las otras respuestas asumen que te refieres a usar sesiones de PHP para almacenar datos en caché. Esta es una buena solución para almacenar datos efímeros que necesita estar disponible de una solicitud a la siguiente.

Pero me pregunto si te refieres al uso de variables definidas por el usuario de MySQL . Puede almacenar largas cadenas de datos en estas variables, y ocupan RAM en el alcance de su hilo de base de datos en el servidor MySQL. Pero estas variables de usuario no permanecen en la memoria después del cierre de la sesión. No son una buena manera de almacenar datos de una solicitud a la siguiente.

La única razón para almacenar grandes cantidades de datos en las variables de usuario es que necesita usarlos en consultas SQL posteriores durante la misma sesión de db (lo que significa que durante la misma solicitud de PHP), y espera evitar transferir esa cadena desde el db servidor a su aplicación. De lo contrario, también puede obtener el resultado y almacenarlo en una variable de PHP.

Otra solución para almacenar datos efímeros es usar memcached . Puede almacenar datos directamente o puede usar memcached como almacén de respaldo para su sesión de PHP .

Solo he visto ejemplos de variables de sesión que se utilizan para almacenar pequeñas cantidades de datos, como una única identificación de usuario. Me pregunto si sería más eficiente mantener en su lugar los datos a los que se accede con más frecuencia en las variables de la sesión para evitar consultar la base de datos.

Por ejemplo, hice una clase de usuario que recopila datos solicitados regularmente para ese usuario en la construcción (su identificación de usuario, nombre de usuario, correo electrónico, contraseña y matrices de datos específicos del sitio) y mantengo esta instancia como una variable de sesión. Después del inicio de sesión inicial del usuario, rara vez se debe consultar la base de datos para obtener información sobre el usuario porque ya está en la memoria.

¿Realmente estoy siendo más eficiente, o simplemente estoy atascado en el sistema con el uso de la memoria?

Nota al margen: en realidad me resulta más fácil obtener datos de la sesión en lugar de tener que preocuparme por optimizar mis consultas y demás, por lo que realmente espero que no sea un idiota.


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

Sí, potencialmente estás siendo más eficiente, pero no si quieres escalar y he aquí por qué:


Almacenando datos en sesiones

Es perfectamente aceptable almacenar algunos datos en sesiones. Teóricamente, no hay límite (aunque nunca he tratado de romperlo ni de empujarlo, solo hay que ir 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 (identificaciones / 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 comience a ver problemas, tanto en términos de uso de disco como de 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 atención.

Si desea escalar (horizontalmente) y retener sesiones basadas en disco, entonces tiene opciones ( las sesiones adhesivas o la red de área de almacenamiento son una pareja) 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 el 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 usualmente 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 muertas 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 de almacenamiento de sesión / enfoques

En tu 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 los sitios micro, pequeños y (dependiendo de cómo se realiza) 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 memoria
para sitios más grandes (con mayor tráfico) y particularmente donde el volumen de usuarios concurrentes es alto, la memoria es más rápida de leer / escribir para variables o datos a los que se accede con mayor frecuencia en lugar de agregar una carga indebida a su base de datos. Puede y debe escribirse en la base de datos (consulte el almacenamiento en caché de escritura directa ), pero también puede guardarse en la memoria para un acceso eficiente.

Una técnica de particular valor es el almacenamiento en memoria caché . Un ejemplo ampliamente utilizado de solución de código abierto compatible con PHP es memchached , que puede usarse en un servidor o en muchos [distribuidos]. He visto esto usado por firmas pequeñas y grandes, y solo hay que ver quién lo usa / contribuye ...


Todo depende de los recursos del servidor y de los usuarios simultáneos de su sitio web / aplicación.

Puede hacer un cálculo aproximado, estimando la memoria de sesión promedio que necesitará cada usuario, multiplicándola por el número promedio de visitantes simultáneos y comparándola con la memoria que tiene disponible para PHP en el servidor.

Este cálculo le ayudará a estimar cuánto es demasiado en su escenario, de una manera muy aproximada pero útil.

EDITAR: por memoria me refiero a RAM y / o espacio en disco, dependiendo de su configuración.


Trate de tener en cuenta que el paradigma web fomenta un modelo de memoria sin estado. Es decir, cargue lo que necesita para renderizar la página, renderizar la página y liberar los recursos.

Obviamente, hay momentos para almacenar datos en caché, pero sí, almacenar información en variables de sesión crea más uso de memoria para su aplicación en su conjunto, y CADA SESIÓN utilizará los N bytes que esté almacenando.

Si no tiene un problema de rendimiento, no se preocupe por el almacenamiento en caché. Por otro lado, si desea almacenar en caché y está solo en un servidor para un pequeño número de usuarios, no se preocupe. Solo tenga en cuenta los inconvenientes de usar variables de sesión en una granja de servidores web (si usa una).