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.
Por Freddie el 05 de Abril de 2011
Y hablando de puntos ¿Por qué odias los puntos seguidos? Aprende a usarlos y serás una mejor persona. De resto, es un gran tuto, gracias por tu aporte. Ya está en portada
Por NeoCesar el 05 de Abril de 2011
Por CusQuisKas el 18 de Abril de 2011
Te debo una (NeoCesar) por postearlo y otra a Luis Enrique
Por español el 05 de Junio de 2011
Por mdlao el 09 de Julio de 2011
Por mdlao el 09 de Julio de 2011
Por Angie !!! :D el 20 de Agosto de 2011
Por Osvaldo el 13 de Noviembre de 2011
Por metalorgia el 18 de Diciembre de 2011
Comparto con FREDDIE., "en internet nos gustan las cosas resumidas y al punto", pero en comparacion con otros, esta bastante resumido
Ademas de una mencion honrosa a Luis Enrique Garcia
Por Serafin el 28 de Febrero de 2012
en serio mil gracias
Por henry el 27 de Abril de 2012
Por Orland el 19 de Mayo de 2012
Por neram el 19 de Julio de 2012
Por NeoCesar el 19 de Julio de 2012
Por iPioLo el 07 de Noviembre de 2012
Por Luis Ponce el 06 de Diciembre de 2012
session_start();
ob_start();
Por alberto el 02 de Junio de 2013
Por Mauro el 04 de Junio de 2013
Por jose el 23 de Agosto de 2013
$_SESSION['nombre'] = "cualquiercosa";
$_SESSION['clave']= "cualquiercosa";
session_destroy();
Es una salida para las contraseñas. Es decir escribir cualquier cosa para cambiar las variables de acceso. Hay que ponerlo en el php donde se cierra el programa. Será bruto y simple pero funciona
Por picguate el 30 de Agosto de 2013
Por federico el 06 de Febrero de 2014
Por Mpc el 10 de Julio de 2014
Por [email protected] el 22 de Diciembre de 2014
Respecto a los que se "quejan" porque les "gustan las cosas resumidas y al punto", yo se los resumo en 2 frases:
1.- El contenido es bastante escueto.
2.- Si lo quieren más corto, sencillamente no se merecen el esfuerzo de este hombre.
Por PlutoElias el 21 de Enero de 2015
Por JESUS el 09 de Julio de 2015
Por David el 13 de Febrero de 2016
Por David el 13 de Febrero de 2016
Por sesu el 20 de Junio de 2016
Por ptofesortcc el 07 de Noviembre de 2016