SAC

SAC

Tuesday, 20 May 2008

Sesiones y objetos en PHP

Hoy me encontré con un problema que venía produciendo bugs en aplicaciones y me resultaban bastante difíciles de encontrar. La situación es la siguiente:

Guardé en la sesión un objeto que era instancia de una class User definida por mí en la aplicación. No parecía haber problema alguno, al construir el objeto podía acceder a todos sus miembros, e incluso cuando dicho objeto estaba almacenado dentro de la sesión.

Pero en algunas páginas, noté que el objeto se perdía, existía el índice que correspondía al mismo en el array de sesión, pero no tenía sus miembros. Después de debuggear algún tiempo noté que este error era producido debido a que en esas páginas, estaba iniciando la sesión antes de incluir la clase de la que dichos objetos eran instancias.

Código Incorrecto

include("...");
...
session_start();
include("class.user.php");


Código Correcto
include("...");
...
include("class.user.php");

session_start();

La mejor forma de manejar estos casos es utilizando un framework o desarrollando la aplicación de manera que la sesión se inicie siempre al mismo momento en todas las páginas, y no debamos tener iniciarla manualmente. El código mostrado en los ejemplos anteriores tiene sólamente fines demostrativos.

0 comments: