Cookies en PHP

En el anterior capítulo, hemos explicado cómo crear sesiones de tal forma que podamos guardar información relativa al usuario que esté visitando nuestro sitio web.

Con las cookies podremos también realizar este tipo de operaciones, ofreciéndonos una serie de ventajas frente al uso de sesiones.

4.3.1. Qué son y cómo funcionan

Una cookie es un conjunto de información que las secuencias de comandos de una página podrán almacenar en el equipo del cliente, de tal forma que el navegador del cliente pueda utilizarlas en cada solicitud a una página.

Una cookie será un fichero de texto que va a almacenar en su interior parejas de datos con su nombre y su valor. Cuando un navegador realiza una petición a una página web, el servidor puede crear un cookie y devolverla al navegador como parte de la respuesta. A partir de ese momento, el navegador envía la cookie de vuelta al servidor cada vez que realice una nueva solicitud a la página web alojada en el servidor. Esto permite al servidor acceder a los datos de la cookie y usar dichos datos para controlar el acceso a su página web.

Por defecto, el periodo de vida de una cookie será válido hasta que el usuario cierre el navegador. Aunque también podrían ser configuradas para que sean “persistentes”.

Un aspecto muy a tener en cuenta si optamos por una estrategia de cookies, es que los usuarios puede que tengan deshabilitadas las cookies en sus navegadores, y esto nos supondría un grave problema.

Las cookies suelen ser utilizadas para permitir a los usuarios saltarse las páginas de “login” o formularios de registro, al tener ya guardados y cargados sus datos de usuario y password. Pero también pueden ser utilizadas para personalizar las páginas con información, como por ejemplo, estado del tiempo, de las carreteras, marcadores deportivos, etc.

Una cookie, como decimos, es un archivo de texto, que podría tener un aspecto como el siguiente:

PHPSESSID=o9mqiad9dmtadh60f02h0h97a3
user_id=86
email=hola@prueba.com
userName=Silvia
passwordCookie=abretesesamo

4.3.2. Creación de una Cookie

Para crear una cookie y configurarla en el navegador, podremos utilizar la función “setcookie()”. Esta función tendrá la siguiente sintaxis:

setcookie ($name, $value, $expire, $path, $domain, $secure, $httponly)

Los únicos parámetros que serán obligatorios serán el nombre y el valor inicial, el resto serán opcionales:

$name. Nombre de la cookie.

$value. Valor de la cookie. Por defecto es una cadena vacía.

$expire. La fecha de expiración de la cookie formato timestamp. Si está configurada a 0, la cookie expirará cuando el usuario cierre el navegador. Es su valor por defecto.

$path. La ruta en el servidor donde la cookie estará disponible. Si se configura con el valor “/”, la cookie estará disponible en todos los directorios del servidor actual. El valor por defecto puede ser configurado en el fichero PHP.INI.

$domain. El dominio para el que la cookie estará disponible. Por defecto es el nombre del servidor que está almacenando la cookie.

$secure. Si está a TRUE, la cookie estará disponible solo si es enviada usando el protocolo HTTPS. Por defecto se encuentra con valor FALSE.

$httponly. Si está a TRUE, la cookie solamente estará disponible a través del protocolo HTTP y no podrá ser utilizada por lenguajes como Javascript. Su valor por defecto es FALSE.

Para recuperar el valor de una cookie, pondremos la variable superglobal $_COOKIE, que al igual que $_SESSION, es un array asociativo.

Las cookies son parte de las cabeceras HTTP, así es que setcookie() tendrá que ser llamada antes que cualquier otra salida sea enviada al navegador. Ésta es la misma limitación que tiene la función header().

Veamos un ejemplo donde vamos a crear un array que va a contener tres cookies, cada una con su valor, y un tiempo de vida de 1 hora. A continuación, utilizaremos de nuevo el bucle FOREACH para recorrer el array $_COOKIE y mostrar todos sus valores:

<?php
// configuramos los cookies
setcookie("cookie[tres]", "cookietres", time() + 3600);
setcookie("cookie[dos]", "cookiedos", time() + 3600);
setcookie("cookie[one]", "cookieuno", time() + 3600);
// después de recargar la página, tendrá que visualizar lo
siguiente
if (isset($_COOKIE['cookie'])) {
foreach ($_COOKIE['cookie'] as $name => $value) {
echo "$name : $value \n". "<br>";
}
}

4.3.3. Eliminación de una Cookie

Para eliminar una cookie tendremos que establecer un valor de fecha ya expirada a la cookie. Podríamos hacerlo de la siguiente forma:

<?php
// configuramos la fecha de expiración en una hora atrás en el tiempo
setcookie (“cookie[tres]”, “”, time() - 3600);
?>

4.3.4. Ventajas y desventajas del uso de Cookies

En el capítulo siguiente explicaremos el uso de sesiones, y sus diferencias con las cookies. De momento, vamos a adelantar una serie de ventajas de las cookies sobre las sesiones:

■ Más fáciles de crear y recibir por navegador.

■ Requieren menos tareas de mantenimiento desde el punto de vista del servidor.

■ Por norma general, pueden persistir más en el tiempo que una sesión.

■ Útil es para formularios del tipo “Recuérdame en este equipo”.

■ Útil es para almacenar opciones personalizadas de usuarios.

Como norma general, deberemos utilizar las cookies en situaciones donde la seguridad es un problema menor y solo un mínimo de datos se están almacenando.

Si la seguridad es un tema importante y hay mucha información a recordar, será mejor el uso de las sesiones. Sin embargo, el uso de sesiones puede requerir un poco más de esfuerzo en desarrollar nuestros scripts.

Además, podríamos nombrar también los siguientes inconvenientes:

■ Los datos se almacenan en el cliente (equipo del usuario). Eso significa que el usuario puede “modificar” esos valores.

■ Solo pueden almacenarse cierta cantidad de datos.

■ En cada carga se pasan todos los datos del usuario, lo que incrementa el consumo de ancho de banda.