usuarios usando start sesiones pasar paginas manejo entre ejemplo control autenticación php mysql session load-balancing memcached

usando - session start php



¿Cuál es la mejor manera de manejar sesiones para un sitio PHP en múltiples hosts? (4)

PHP almacena su información de sesión en el sistema de archivos del host del servidor que establece esa sesión. En un entorno PHP de múltiples hosts, donde la carga se distribuye sin inteligencia entre cada host, las variables de sesión de PHP no están disponibles para cada solicitud (a menos que la solicitud se asigne al mismo host, supongamos que no tenemos control sobre el equilibrador de carga) .

Este sitio, denominado "La Guía de Hitchhikers para el equilibrio de carga de PHP", sugiere reemplazar el controlador de sesión de PHP y almacenar información de sesión en la base de datos compartida.

¿Cuál es, en su humilde opinión, la mejor forma de mantener la información de la sesión en un entorno de host PHP múltiple?

ACTUALIZACIÓN: Gracias por los excelentes comentarios. Para cualquiera que esté buscando un código de ejemplo, encontramos un útil tutorial sobre cómo escribir una clase Session Manager para MySQL, que recomiendo visitar.


Base de datos, o Base de datos + Memcache. En general, las sesiones no deben escribirse muy a menudo. Comience con una solución de base de datos que solo escriba en el db cuando los datos de la sesión hayan cambiado . Memcache se debe agregar más tarde como una mejora de rendimiento. Una solución db será muy rápida porque solo busca claves primarias. Asegúrese de que el archivo db tenga bloqueo de fila, no bloqueo de tabla (myISAM). MemCache solo es una mala idea ... Si se desborda, se cuelga o se reinicia, los usuarios se desconectarán.


Dependiendo del presupuesto de su proyecto, también puede considerar Zend Platform para sus máquinas de producción, que además de otras excelentes características, incluye clustering de sesión configurable, que funciona de manera similar a como lo hace CDN.


El almacenamiento de los datos de la sesión en una base de datos compartida funciona, pero puede ser lento. Si es un sitio realmente grande, memcache es probablemente una mejor opción.


Haga lo que haga, no lo almacene en el servidor (incluso si solo está utilizando un servidor o en un escenario de conmutación por error 1 + 1). Te pondrá en un callejón sin salida.

Yo diría, use Database + Memcache para almacenamiento / recuperación, lo mantendrá fuera del alcance de Zend (y créame, las cosas se rompen en algún momento con Zend). Dado que podrá particionar fácilmente por UserID o SessionID, incluso con MySQL dejará las cosas bastante escalables.

(Editar: además, ir con DB + Memcache no lo vincula a una fiesta comercial, tampoco lo vincula con PHP, algo de lo que podría estar contento en el futuro)