Cómo compartir sesiones en múltiples servidores web
1. Guarde los datos de la sesión que deben guardarse en el disco del servidor web en una cookie
Es decir, utilice el mecanismo de sesión de cookies para reemplazar el mecanismo de sesión de la sesión y guardar la sesión. datos al cliente para navegar De esta manera, cuando el mismo usuario visita el mismo sitio web, no importa en qué servidor web se equilibre la carga, no es necesario ir al servidor para solicitar datos de sesión, sino obtener directamente los datos de sesión en la cookie del cliente. De esta forma no se perderá el estado de inicio de sesión del mismo usuario.
Sin embargo, existen tres desventajas principales al hacer esto:
Poner datos de sesión en la cookie del cliente suele ser información importante (como ID de usuario, apodo, etc.), que puede causar problemas de seguridad, pero los datos de la sesión se pueden cifrar y luego almacenar en cookies para reducir los riesgos de seguridad.
El navegador limita el tamaño de los datos de una sola cookie a aproximadamente 4K, por lo que habrá un problema de limitación del tamaño de los datos.
Afecta al rendimiento del ancho de banda y reduce la velocidad de acceso a la página. En el caso de mucho tráfico, cada vez que un usuario realiza una solicitud, los datos de la sesión en la cookie del cliente deben enviarse al servidor, lo que ocupa más ancho de banda, lo que afecta la velocidad de acceso y aumenta el costo del ancho de banda del servidor.
2. Guarde los datos de la sesión que deben guardarse en el disco del servidor web en la base de datos MySQL.
El ID de sesión todavía se almacena en el cliente utilizando el mecanismo de cookies, pero los datos de la sesión. se almacena en MySQL en el servidor. (Es necesario establecer la relación correspondiente entre el ID de sesión y la fila de datos de la sesión)
Pero esto solo es adecuado para sitios web con tráfico relativamente pequeño. Si el sitio web tiene una gran cantidad de visitas, ejercerá mucha presión sobre el servidor MySQL. Porque cada vez que un usuario solicita una página (incluso si la página se actualiza), se debe consultar la tabla de datos de la sesión en la base de datos MySQL para determinar el estado de inicio de sesión del usuario y leer la información relacionada con el usuario, lo que inevitablemente ejercerá mucha presión sobre el servidor de la base de datos, lo que reducirá la velocidad de respuesta del servidor y afectará la experiencia del usuario.
3. Guarde los datos de la sesión que deben guardarse en el disco del servidor web en una base de datos en memoria (memcache o redis)
Memcache o redis se basan en el almacenamiento de datos en la memoria. y tiene muy buen rendimiento Alto, especialmente adecuado en situaciones de alta concurrencia. Principalmente porque leer datos de la memoria es mucho más rápido que leer datos del disco.
La base de datos en memoria también admite el mecanismo de caducidad de datos, que corresponde al mecanismo de caducidad de la sesión. Se recomienda utilizar la base de datos en memoria de Redis porque admite más
A continuación se presenta una breve introducción a los dos métodos siguientes:
Si varios servidores web corresponden a diferentes nombres de dominio, para garantizar la unicidad de la cookie (se utiliza la misma cookie en cada nombre de dominio es válido), debe modificar session.cookie_domain en el archivo php.ini
Dado que los dos últimos métodos son formas definidas por el usuario para administrar sesiones, en lugar del método de procesamiento de archivos predeterminado, debe modificar php.save_handler=user en ini
Antes de abrir la sesión (es decir, antes de llamar a session_start()), primero debe llamar a session_set_save_handler. Para el uso específico de session_set_save_handler. consulte el manual de PHP