Manejo avanzado de sesiones en PHP

Una pregunta interesante relativa al manejo de sesiones en PHP es como se almacenan los datos de la sesión (las variables registradas y demás), en PHP por omisión los datos sobre las sesiones se almacenan en archivos en el directorio /tmp, este método funciona correctamente pero tiene 2 inconvenientes:

1. No es fácil compartir sesiones entre servers.

Dado que los datos se almacenan en un file-system una variable “registrada” en un server no puede ser visible en otro ya que el mismo no tiene forma de recuperar el contenido de la misma. (Podría hacerse si se cambia el directorio /tmp a un directorio compartido entre maquinas usando NFS pero este no es el tema aquí)

2. Dada una cantidad de usuarios realmente elevada el método no es eficiente.

Estamos hablando de cantidades de usuarios realmente muy grandes simultáneos, dados los cuales hay demasiadas sesiones por mantener y el file-system se torna lento en la búsqueda y recuperación de los archivos con los datos.

Afortunadamente en PHP es posible redefinir los métodos de almacenamiento que el lenguaje utiliza para almacenar las sesiones. Esto se hace con la función session_set_save_handler

Ejemplo:

session_set_save_handler («open», «close», «read», «write», «destroy», «gc»);

En general en open no es necesario hacer nada ya que todo el manejo de Registración de variables esta dado por read y write. Write recibirá como clave el identificador de la sesión y como datos una estructura interna de php que contiene la representación de todos los datos a almacenar para la sesión. De la misma forma read debe ,dada la clave (session_id), recuperar todos los datos de la sesión y luego php en forma interna setea las variables correspondientes para que sean visibles. Todas las funciones deben devolver “true” para que el manejo de sesiones funcione.

Fuente: Documento Generación de web sites dinámicos usando PHP