El uso de sesiones es un método ampliamente extendido en muchos tipos de aplicación web. Básicamente una sesión es la secuencia de páginas que un usuario visita en un sitio web. Desde que entra en un sitio, hasta que lo abandona.
El término sesión en PHP, session en inglés, se aplica a esta secuencia de navegación, para ello crearemos un identificador único que asignamos a cada una de estas sesiones de navegación. A este identificador de sesión se le denomina, comúnmente, como la sesión.
El proceso de control de sesióen cualquier lenguaje de programación podría ser algo así:
- Existe una sesión?
- Si existe la retomamos
- Si no existe creamos una nueva
- Generar un identificador único
Para no perder el hilo de la navegación del usuario se debe asociar esta sesión a todas las URLs y acciones de formulario. Se podría crear una cookie que incluya el identificador de sesión, pero es bueno recordar que la disponibilidad o no de las cookies depende del navegador del usuario, y no es conveniente confiarse de lo que un usuario pueda o no tener habilitado.
Lo anterior es aplicable a cualquier lenguaje de programación como C, Perl, etc. En PHP4 tenemos la suerte de que toda la gestión de sesiones la hace el mismo PHP.
Uno de los usos principales de PHPLib era el manejo de sesiones en los tiempos del PHP3 ya que la versión 3 de PHP no tenía funciones para el manejo de sesiones. Esto cambio con la versión 4 de PHP, pero aún asi se sigue usando el PHPLib ya que ofrece flexibilidad y muchas más características avanzadas importantes.
2.1 La clase Session
La clase Session mantiene una lista de propiedades (variables de una clase) y provee de un conjunto de funciones para traer y guardar desde y hacia un contenedor de datos (storage container). Variables de Session
- classname. El nombre de la clase.
- magic. String secreto usado en la creación del ID. Se debe cambiar!!
- mode. Modo de propagación del ID de Session. cookie o get.
- fallback_mode. Modo de propagación del Session ID en caso de que $mode no funcione. Dejar $mode en cookie y $fallback_mode en get.
- lifetime. Duración de la cookie en minutos. Si se deja en 0 quedan como cookies de sesión.
- gc_time. Manejo de garbage collection.
- gc_probability. Manejo de garbage collection.
- allowcache. Control del cache de sesión de las páginas, si se deja en no (por defecto), la página no queda en cache bajo HTTP/1.1 o HTTP/1.0; si se deja en public, la página queda cache público bajo HTTP/1.1 y HTTP/1.0; si se deja en private, la página queda en cache privado bajo HTTP/1.1 y no es dejada en cache bajo HTTP/1.0.
- allowcache_expires. Cantidad de minutos a permanecer en cache, cuando esta habilitado el caching.
- that_class. Nombre de la clase que especifica nuestro contenedor de datos. Session usa esta clase para almacenar y obtener datos.
- auto_init. Nombre de archivo a ser cargado al establecerse la sesión.
- secure_auto_init. Se deja en 0, si todas las páginas siempre llaman a page_close().
Estas variables se configuran por cada clase de sesión y se dejan en el archivo local.inc o local4.inc. Ejemplo de una sub-clase de Session
class Prueba_Session extends Session { var $classname = "Prueba_Session"; var $cookiename = "Prueba";
por defecto mismo nombre que clase var $magic = "cambiaresto"; semilla del ID var $mode = "cookie";
los session ID se propagan con cookies var $fallback_mode = ""; var $lifetime = ; 0 = crear session cookies, sino minutos var $that_class = "Prueba_CT_Sql";
nombre del contenedor de datos var $gc_probability = 5; var $allowcache = "no";}
2.2 Clase del contenedor de datos
La clase Session necesita de un “contenedor” donde serán almacenadas las variables de sesión. Este “contenedor” se indica en la variable $that_class. Por ejemplo
var $that_class = "Prueba_CT_Sql";
luego se debe definir la sub-clase del contenedor:
class Prueba_CT_Sql extends CT_Sql { var $database_class = "DB_prueba"; A que base de datos conectarse... var $database_table = "active_sessions";
y obtener información acerca de las sesiones en esta tabla.}