Comunidad de diseño web y desarrollo en internet

Eliminar sesiones en PHP 5.3.5

Con la salida de PHP 5.3.5 algunas muchas cosas han cambiado. Entre ellas el manejo de sesiones. Muchas de las funciones que antes usábamos para el trabajo con sesiones han quedado como "DEPRECATED", es decir fuera de uso. Otras no funcionan como uno esperaba o al menos como venían funcionando

No funciona session_destroy();


El problema que veremos es la eliminación o destrucción de sesiones. Antes era tan fácil como poner:

Código :

<?php session_destroy(); ?>
Y listo, nuestra sesión quedaba destruida. Todas las variables del tipo $_SESSION['mi_variable'] quedaban igualmente destruidas y/o eliminadas sin la necesidad de cerrar el navegador para que esto suceda. Muy útil para ponerlo en una función logout.

Si hoy inicias una sesión en PHP 5.3.5 y luego le aplicas este método para cerrar (eliminar) tu sesión, esta no queda destruida. Es más, las variables de tipo $_SESSION['mi_variable'] conservan los datos que venían almacenando.

Si creas una pagina con usuarios y uno de ellos inicia sesión en tu página luego cierra su sesión y se va sin haber cerrado el navegador, otro usuario en la misma máquina podría recuperar esa sesión. Esto porque las variables de sesión aún existen y aún están almacenando la información del usuario anterior.

Por qué ya no funciona session_destroy()


¿Donde reside el verdadero problema si supuestamente session_destroy() debía de haber eliminado todo rastro de la sesión y al ejecutarlo no nos muestra ningún error?

El problema esta en que, si bien session_destroy() elimina todos los datos asociados a la sesión, este mismo no elimina la cookie que contiene el identificador de sesión en el cliente, lo que quiere decir que si se realiza una nueva petición al servidor, el navegador incorpora dicho identificador.

Arreglar el problema de session_destroy en PHP 5.3.5
La respuesta obvia es eliminando la cookie que contiene el Id de la sesión, esto lo hacemos así:

Código :

<?php
$parametros_cookies = session_get_cookie_params(); 
setcookie(session_name(),0,1,$parametros_cookies["path"]);
?>


De modo que para eliminar/destruir una sesión en PHP 5.3.5 el código completo es:

Código :

session_destroy();
$parametros_cookies = session_get_cookie_params(); 
setcookie(session_name(),0,1,$parametros_cookies["path"]);

con esto habremos eliminado toda la información de la sesión y podremos vivir tranquilos por ahora.

Esta solución me agradaría decir que se me ocurrió a mi, pero como muchas cosas que he aprendido la encontré googleando, la idea original es de Luis Enrique Garcia - Ing. Sistemas de Colombia, no le conozco personal ni virtualmente pero a él las gracias, este problema me tuvo cabezón toda una mañana. Espero puede servirle a otro Claber también.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate