18-07-2025

Sesiones en php: cómo gestionar el estado de sesión

Para saber estado de sesión en php hay que usar la función session_status que puede obtener los siguientes valores:
  • PHP_SESSION_DISABLED: indica que las sesiones están deshabilitadas en la configuración del servidor. Esto significa que el soporte para sesiones en php no está activado, y por lo tanto, no se pueden usar funciones como session_start, $_SESSION, o cualquier otra relacionada con el manejo de sesiones. Su valor es "0". Cuando ocurre ésto:
    • Configuración en php.ini: La directiva "session.save_handler" está configurada de manera que no permite sesiones (por ejemplo, si no hay un manejador válido como files o memcached).
    • Sesiones deshabilitadas explícitamente: En el archivo php.ini, si "session.auto_start" está en 0 (por defecto) y no se ha configurado correctamente el soporte para sesiones.
    • Problemas del servidor: El directorio configurado para almacenar sesiones "session.save_path" no es escribible o está mal configurado.
    • Entornos específicos: En algunos entornos restringidos o configuraciones personalizadas, las sesiones pueden estar desactivadas por motivos de seguridad o rendimiento.
  • PHP_SESSION_NONE: indica que no hay una sesión activa en el momento actual, pero las sesiones están habilitadas en el servidor. Esto significa que el soporte para sesiones está configurado correctamente, pero no se ha iniciado ninguna sesión mediante "session_start" en el script actual. Su valor es "1".Cuando ocurre ésto:
    • Antes de iniciar una sesión: Si no se ha ejecutado "session_start" en el script actual.
    • Después de destruir una sesión: Si has usado "session_destroy" o "session_unset" para eliminar una sesión existente, el estado vuelve a "PHP_SESSION_NONE" hasta que se inicie una nueva sesión.
    • Sesión no iniciada automáticamente: Si la directiva "session.auto_start" en "php.ini" está configurada como 0 (por defecto), las sesiones no se inician automáticamente, y el estado será PHP_SESSION_NONE hasta que llames a "session_start".
  • PHP_SESSION_ACTIVE: indica que hay una sesión activa en el script actual. Una sesión ha sido iniciada mediante "session_start", y el servidor está manejando una sesión activa, lo que permite leer y escribir datos en la superglobal "$_SESSION". Su valor es "2". Cuando ocurre ésto:
    • Después de llamar a "session_start": Una vez que llamas a "session_start" en el script actual, el estado cambia a "PHP_SESSION_ACTIVE", y la sesión permanece activa hasta que se destruya o expire.
    • Sesión iniciada automáticamente: Si la directiva "session.auto_start" en "php.ini" está configurada como 1, las sesiones se inician automáticamente al cargar cualquier script PHP, resultando en "PHP_SESSION_ACTIVE".
    • Sesión persistente: Si un usuario ya tiene una sesión activa (por ejemplo, desde una página anterior) y el identificador de sesión (generalmente una cookie) sigue válido, el estado será "PHP_SESSION_ACTIVE" al llamar a session_start().