¿Cómo administrar una sola sesión PHP5 en múltiples servidores apache?
session multiserver (5)
Almacene sesiones en una base de datos a la que se puede acceder desde todo el conjunto de servidores.
Hola, tengo que recuperar datos de varios servidores web. Primero, inicio sesión como usuario en mi sitio web. Después de iniciar sesión con éxito tengo que buscar datos de diferentes servidores web y mostrarlos. ¿Cómo puedo compartir una sola sesión con varios servidores? ¿Cómo puedo conseguir esto?
Cuando inicio sesión por primera vez, creo la sesión y la identificación de la sesión guardada en la carpeta temporal de ese servidor. Cuando trato de acceder a otro servidor, ¿cómo puedo usar la sesión actual que ya se creó cuando inicié sesión? ¿Alguien puede sugerir una solución?
Guárdelo en una base de datos: haga que todos los servidores se conecten a la misma base de datos. Primer resultado para " sesión de tienda php en la base de datos "
Otra opción sería usar memcached para almacenar las sesiones.
Lo importante es que debe tener un recurso compartido, ya sea una base de datos SQL, una memoria de Memcached, una base de datos NoSQL, etc. a la que todos los servidores puedan acceder. A continuación, utiliza session_set_save_handler para acceder al recurso compartido.
En complemento a todas estas respuestas:
Si almacena sesiones en bases de datos, verifique que la recolección de basura de sesiones en PHP esté realmente activada (no es el caso en distribuciones parecidas a Debian, decidieron desechar sesiones con su propio cron y alteraron el php.ini para que nunca se inicie gc, entonces verifique la session.gc_probability
y session.gc_divisor
). El principal problema del almacenamiento de sesiones en la base de datos es que significa una gran cantidad de consultas de escritura y un gran número de conflictos de acceso en la base de datos. Esta es una gran manera de hacer hincapié en un servidor de base de datos como MySQL. Entonces, en mi humilde opinión, el uso de otra solución es mejor, esto mantiene su relación de lectura / escritura en una mejor base de datos de la web.
También puede mantener el sistema de almacenamiento de archivos y simplemente compartir el directorio de archivos entre los servidores con NFS . Modifique la configuración de session.save_path
para usar algo que no sea /tmp
. Pero NFS no es, por definición, el modo más rápido de usar un disco. Prefiere memcached o mongodb para un acceso rápido.
Si lo único que necesita compartir entre el servidor es la autenticación , en lugar de compartir el almacenamiento de la sesión real, puede compartir las credenciales de autenticación. Al igual que el sistema OpenId en SO, es lo que llamamos un SSO, para el elemento web tiene varias soluciones, desde OpenId hasta CAS , y otras. Si los datos se fusionan en el lado del cliente (ajax, ESI-gate), entonces realmente no necesita un almacenamiento de datos de sesión común en el servidor. Esto evitará tener 3 de los 5 datos de escritura de aplicación web impactados en la sesión compartida al mismo tiempo. Otras técnicas para compartir sesiones (base de datos, NFS, incluso memcached) se utilizan principalmente para compartir datos entre varios servidores porque las herramientas de Load Balancing pueden poner su pedido HTTP secuencial de un servidor a otro, pero si realmente quiere decir recopilación paralela de datos, debería estudiar SSO.
Tendrás que usar otro controlador de sesión.
Usted puede:
- construye el tuyo propio (mira
session_set_save_handler
) o - use extensiones que proporcionan su propio controlador de sesión, como memcached