Control de sesiones con cookies

Por defecto, y siempre que el navegador acepte el uso de cookies, PHP utilizará este mecanismo para realizar el control de las sesiones. PHP proporciona un conjunto de funciones para el manejo de las mismas.

El comportamiento tanto del sistema de sesiones como de las funciones que proporciona PHP, dependen en gran medida de la configuración de las directivas de sesiones en el archivo php.ini. En el siguiente apartado veremos las directivas más importantes relacionadas con las sesiones.

Vamos a ver un ejemplo de control de sesiones que nos servirá de guía para ir explicando las distintas funciones y el paso de variables de sesión.

  • pagina1.php
<?php
   session_start();
   $_SESSION['svar']='Hola a todos';
   echo 'El contenido de $_SESSION[\'svar\'] es ' .
      $_SESSION['svar'] . '<br>';
?>
<a href="pagina2.php">Siguiente</a>
  • pagina2.php
<?php
   session_start();
   echo 'El contenido de $_SESSION[\'svar\'] es ' .
      $_SESSION['svar'] . '<br>';
   unset ($_SESSION['svar']);
?>
<a href="pagina3.php">Siguiente</a>
  • pagina3.php
<?php
   session_start();
   echo 'El contenido de $_SESSION[\'svar\'] es ' .
      $_SESSION['svar'] . '<br>';
   session_destroy();
?>
<a href="pagina1.php">Inicio</a>

Los pasos básicos del uso de sesiones son los siguientes:

  1. Iniciar una sesión.
  2. Registrar variables de sesión.
  3. Utilizar variables de sesión registradas.
  4. Anular variables registradas y eliminar la sesión

Estos pasos no siempre tienen lugar al mismo tiempo y en la misma secuencia, ya que alguno puede producirse más de una vez. El código anterior es un sencillo ejemplo de uso de sesiones siguiendo los pasos básicos que acabamos de enumerar.

Veamos cada uno de los pasos más detenidamente:

**1.- Iniciar una sesión**

Antes de poder utilizar las funcionalidades de sesiones, es necesario iniciar una sesión. La forma más rápida y simple de hacerlo es mediante una llamada a la función **session_start()**.

Esta función comprueba si existe un identificador de sesión (recibido por cookies o mediante GET/POST). Si todavía no existe, simplemente crea uno. En caso de que ya exista, se encarga de recuperar las variables de sesión registradas previamente para que podamos utilizarlas.

Es aconsejable invocar session_start() al principio de todos los scripts que utilicen sesiones, ya que, con dicha función se modifican las cabeceras HTTP. Si colocamos algún carácter, incluso un espacio en blanco nos daría un advertencia de envío de cabeceras y no funcionaría correctamente dicho script.

Podemos obviar la llamada a **session_start()** configurando PHP para que lo haga automáticamente cuando alguien visite nuestro sitio web. La directiva de configuración de php.ini que controla este comportamiento es

session.auto_start

Aunque parece interesante no es recomendable pues en todos los ficheros PHP se abrirá/continuará una sesión aunque no sea necesario.

** 2.- Registrar variables de sesión**

PHP pone a nuestra disposición el array superglobal **$_SESSION**, un array asociativo que servirá de contenedor para las variables de sesión. Como hemos comentado anteriormente, es una variable 'superglobal', o global automática, es decir, estará disponible en todos los contextos a lo largo de nuestro script PHP.

Tampoco necesitamos utilizar la palabra reservada global para acceder a ella dentro de funciones o métodos. Por ejemplo:

global $_SESSION

Por lo tanto, el registro de variables de sesión consiste simplemente en añadir elementos al array **$_SESSION** de la siguiente forma:

$_SESSION['var']='Hola mundo';

¿Dónde se almacenan las variables de sesión? Hemos explicado como se pasa el identificador de sesión entre diferentes páginas, pero ¿Dónde se almacenan el resto de datos asociados a la sesión (lo que hemos denominado variables de sesión)?
Por defecto, el contenido de dichas variables se almacena en ficheros especiales en el servidor, usando un fichero por sesión.El fichero tiene por nombre el identificador de la sesión, y almacena las variables en la forma nombre=valor.
La configuración de cómo y dónde se almacenan las variables de sesión se configura en el archivo php.ini, con las directivas:

session.save_handler = files
session.save_path = "c:\wamp\tmp"

** 3.- Utilizar variables de sesión**

Igual de sencillo que resulta añadir variables de sesión es utilizar dichas variables para acceder a su contenido y/o modificarlo.

Previo a cualquier acceso a las variables de sesión, deberemos iniciar la sesión mediante una llamada a session_start(), la cual realizará la carga de todas las variables previamente registradas en la matriz $_SESSION.

Para acceder a las variables de sesión tan sólo tenemos que acceder a los elementos de la matriz $_SESSION.

Por ejemplo, vamos a guardar en la variable **$ejemplo** lo que contiene **$_SESSION [ 'var' ]**:

<?php
   session_start();
   $ejemplo = $_SESSION['var']; //$ejemplo -> 'Hola mundo'
?>

Para comprobar si existe una variable en la sesión, debemos utilizar los métodos habituales (**isset**, **empty**), con el array **$_SESSION**.

Un ejemplo de cómo comprobar la existencia o no de la variable "**var**" dentro de la sesión:

if (isset ($_SESSION[‘svar’]) === TRUE) {
   ...
}

**4.- Anular las variables registradas y eliminar la sesión**

Cuando hayamos finalizado con una variable de sesión, es decir, ya no necesitemos pasarla más entre páginas ni sea necesario acceder a su valor, podemos anular su registro.

Para anular una variable de sesión es recomendable utilizar la función **unset()** sobre el elemento del array **$_SESSION**

Por ejemplo, si ya no vamos a usar más la variable "var" podemos eliminarla de la sesión de la siguiente forma:

unset($_SESSION['var']);

Un ejemplo típico sería un carrito de la compra. Si el usuario ha confirmado el mismo (último paso), todos los datos de dicho carrito se almacenará en la base de datos y posteriormente se borrarán de la sesión redirigiendo al usuario a la página principal. No queremos eliminar los datos del usuario (sacar el usuario de la aplicación) sino que se eliminen los datos del carrito confirmanpero si los datos del carrito.

Por contra, si lo que queremos es anular el registro de todas las variables, en vez de utilizar **unset** sobre el array **$_SESSION**, usaremos

$_SESSION = array ();

Por último, cuando hayamos finalizado con una sesión, primero deberíamos anular el registro de todas sus variables y posteriormente invocar la función session_destroy().

Esta función destruye todos los datos asociados con la sesión, pero no elimina las variables asociadas ni la cookie.

// Finalmente destruye la sesión
session_destroy();

results matching ""

    No results matching ""