29 de agosto de 2017

Chequear si la sesión está activa en PHP

Muchas veces necesitamos, desde la programación, comprobar el estado de la sesión del usuario, en especial si la sesión del usuario está activa en PHP.

Las sesiones son un mecanismo para almacenar información y hacer un seguimiento de los usuarios de la aplicación web, para superar la naturaleza sin estados del protocolo HTTP.

En este artículo explicaremos un modo de comprobar si la sesión de un usuario está activa (o abierta) en una aplicación web en PHP.

¿Que son las sesiones?

Una aplicación web necesita identificar a sus usuarios, especificamente para saber que información deben desplegarles. Por ejemplo, la típica web (aplicación de web) de un banco puede atender a muchos usuarios simultáneamente, y para identificarlos disponde un formulario, donde le pide al usuario identificarse. Este último le entrega mediante el formulario sus credenciales de identificación (nombre y clave) a la aplicación web.

Una vez identificado el usuario, la aplicación del banco necesita de un método de hacer un seguimiento del usuario para las sucesivas interacción de este con la página web y así mantener su estado.

El mecanismo para iniciar el seguimiento del usuario en líneas generales es simple, la aplicación web hace dos acciones simultáneas:

  • Envia una cookie al navegador con al menos una secuencia de caracteres (token) que sirve como identificador de la cookie.
  • Y también crea en el servidor una asociación (variable) entre el identificador de la cookie con el identificador de usuario en la base de datos de la aplicación web. Popularmente a esta asociación se le suele llamar sesión, aunque eso no es del todo correcto.

Una cookie es un pequeño archivo que se almacena en el navegador.

Entonces la manera que tiene la aplicación web de indentificar un usuario, frente a una petición de este último es:

  • Recibir e identificar la Cookie.
  • A partir de la Cookie, chequear si en el servidor existe una "sesión" asociada y vigente.

¿Cómo verificar si hay una sesión activa?

Desde PHP podemos chequear o comprobar si existe una sesión activa para el usuario en la aplicación web.

Frecuentemente, solía usarse el código isset[$_SESSION], pero una mejor idea es crear el método is_session_started(), donde el código PHP es:

is_session_started() {

 // chequear que no esté ejecutándole 
 // desde la línea de comandos:
    if ( php_sapi_name() !== 'cli' ) {

        if ( version_compare(phpversion(), '5.4.0', '>=') ) {

            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;

        } else {

            return session_id() === '' ? FALSE : TRUE;
        }
    }

    return FALSE;
}

En versiones iguales o superiores 5.4 de PHP, se encuentra disponible en el propio intérprete PHP una forma directa para detectar una sesion abierta usando el método:

session_status()

Mayor referencia de la función session_status en: http://php.net/manual/en/function.session-status.php.

Conclusión

Es una frecuente o inevitable tarea, cuando desarrollamos aplicaciones web, el chequear si existe una sesión activa para un usuario.

En general, los frameworks de PHP disponen de facilidades ya incluidas para hacer esta comprobación. En especial, en el popular framework de PHP llamado Codeigniter, el código que se emplea es el siguiente:

function is_session_started() {

  if ( php_sapi_name() !== 'cli' ) { 

    if ( !isset($this->session) ) {

      return FALSE;

    } else if ($this->session->userdata('session_id') === FALSE) {

      return FALSE;
    }
  
    return TRUE;
  }
  return FALSE;
}

Espero que este artículo les sea útil para la codificación de aplicaciones en PHP.

Algunas referencias