¿Cómo gestionar una única sesión PHP5 en varios servidores Apache?
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 correctamente, tengo que recuperar datos de diferentes servidores web y mostrarlos. ¿Cómo puedo compartir una única sesión con varios servidores? ¿Cómo puedo conseguir esto?
Cuando inicio sesión por primera vez, creo una sesión y una identificación de sesión guardada en la carpeta temporal de ese servidor. Cuando intento acceder a otro servidor, ¿cómo puedo utilizar la sesión actual que ya se creó cuando inicié sesión? ¿Alguien puede sugerir una solución?
Tendrás que utilizar otro controlador de sesión.
Puede:
- construye el tuyo propio (ver
session_set_save_handler
) o - usar extensiones que proporcionen su propio controlador de sesión, como memcached
Además de 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 tipo Debian, decidieron descartar sesiones con su propio cron y alteraron el php.ini para que nunca inicie ninguna). gc, así que revisa session.gc_probability
y session.gc_divisor
). El principal problema del almacenamiento de sesiones en la base de datos es que implica muchas consultas de escritura y muchos accesos conflictivos a la base de datos. Esta es una excelente manera de enfatizar un servidor de base de datos como MySQL. Entonces, en mi humilde opinión, usar otra solución es mejor, esto mantiene la relación lectura/escritura en una mejor forma de base de datos web.
También puede conservar el sistema de almacenamiento de archivos y simplemente compartir el directorio de archivos entre servidores con NFS . Modifique la session.save_path
configuración para usar algo distinto a /tmp
. Pero NFS, por definición, no es la forma más rápida de utilizar un disco. Prefiere memcached o mongodb para un acceso rápido.
Si lo único que necesita compartir entre el servidor es la autenticación , entonces, en lugar de compartir el almacenamiento de la sesión real, podría compartir las credenciales de autenticación. Al igual que el sistema OpenId en SO, es lo que llamamos un SSO, para la parte web tienes varias soluciones, desde OpenId hasta CAS , y otras. Si los datos se combinan en el lado del cliente (ajax, ESI-gate), entonces realmente no necesita un almacenamiento de datos de sesión común en el lado del servidor. Esto evitará que 3 de sus 5 aplicaciones web afectadas escriban datos 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 sus datos entre varios servidores porque las herramientas de equilibrio de carga pueden transferir su solicitud HTTP secuencial de un servidor a otro, pero si realmente se refiere a la recopilación de datos en paralelo, debería hacerlo. estudiar SSO.