HTTP es un protocolo sin estado por una razón. Las sesiones sueldan el estado en HTTP. Como regla general, evite usar el estado de sesión.
ACTUALIZACIÓN: No existe el concepto de una sesión en el nivel HTTP; los servidores proporcionan esto al darle al cliente un ID único y decirle al cliente que lo vuelva a enviar en cada solicitud. Luego, el servidor usa esa ID como clave en una gran tabla hash de objetos de sesión. Cada vez que el servidor recibe una solicitud, busca la información de la sesión fuera de su tabla hash de objetos de sesión en función de la ID que el cliente envió con la solicitud. Todo este trabajo adicional es un doble golpe para la escalabilidad (una gran razón por la cual HTTP no tiene estado).
- Whammy One: Reduce el trabajo que puede hacer un solo servidor.
- Whammy Two: hace que sea más difícil de escalar porque ahora no puede enrutar una solicitud a cualquier servidor antiguo, no todos tienen la misma sesión. Puede anclar todas las solicitudes con una ID de sesión determinada al mismo servidor. Eso no es fácil, y es un punto único de falla (no para el sistema en su conjunto, sino para grandes partes de sus usuarios). O bien, podría compartir el almacenamiento de la sesión en todos los servidores del clúster, pero ahora tiene más complejidad: memoria conectada a la red, un servidor de sesión independiente, etc.
Dado todo eso, cuanta más información pongas en la sesión, mayor será el impacto en el rendimiento (como señala Vinko). Además, como señala Vinko, si su objeto no es serializable, la sesión se comportará mal. Por lo tanto, como regla general, evite poner más de lo absolutamente necesario en la sesión.
@Vinko Por lo general, puede evitar que el servidor almacene el estado incorporando los datos que está rastreando en la respuesta que envía y haciendo que el cliente vuelva a enviarlos, por ejemplo, enviando los datos en una entrada oculta. Si realmente necesita un seguimiento del estado del lado del servidor, probablemente debería estar en su almacén de datos de respaldo.
(Vinko agrega: PHP puede usar una base de datos para almacenar información de sesión, y hacer que el cliente vuelva a enviar los datos cada vez puede resolver posibles problemas de escalabilidad, pero abre una gran lata de problemas de seguridad a los que debe prestar atención ahora que el cliente tiene el control de todo tu estado)