session_unset vs session_destroy

febrero 18, 2016

¿Cual es la diferencia entre ambas funciones? En el resultado final parece que no hay mucha diferencia ya que  tanto si se llama a session_unset como a session_destroy al finalizar el script el resultado casi siempre es igual: se han borrado las variables de sesión. ¿donde esta entonces la diferencia? En la linea de tiempo. Las información de una sesión esta almacenada, normalmente en el sistema de archivos; al hacer session_start(), esa información se carga en memoria y esta disponible para el resto del script. Al finalizar el script, los cambios en la copia de la información de sesión de la memoria se almacenan de nuevo.

Session_destroy destruye los datos almacenados de la sesión, pero no la copia en memoria, como puedes ver aquí:

session_start();
$_SESSION["foo"] = "bar";
session_destroy();
echo $_SESSION["foo"];

-> devuelve “bar”.

¡ojo! Cuando finalize el script, la copia de los datos de sesión de la memoria no se guardan.

Session_unset borra los datos de sesión la memoria aunque estos todavía están en el almacén el breve tiempo en que termina el script. Al finalizar serán borrados por el gestor de sesiones.

Bien, ahora la pregunta es la siguiente: ¿debemos usar session_destroy seguido de session_unset o al reves?. Veamos un ejemplo:

session_start();
$_SESSION["foo"] = "bar";
session_destroy();
session_unset()
echo $_SESSION["foo"];

-> devuelve “bar”.

¿sorprendente? Lo que ha pasado es que al llamar primero a session_destroy, la copia de memoria queda desvinculada a la sesión, así que el session_unset no tiene efecto alguno (aunque los datos en memoria no sobrevivirán al script).

El orden correcto es este:

session_start();$_SESSION["foo"] = "bar";
session_unset();
session_destroy()
echo $_SESSION["foo"]; // a modo de test..falla.
-> genera un error warning..

En todo caso, haz siempre un session_unset. Si usas un session_destroy por ejemplo en el logout de un usuario registrado, es posible que otras partes de tu script consulten la datos de sesión de memoria, donde el usuario todavía figura como logeado.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: