5.- Cookies

Al dar el salto de las páginas estáticas en HTML a las páginas dinámicas surge la necesidad de guardar de alguna manera las preferencias de los usuarios. Y a esta necesidad responden las cookies.

La cookie es un nombre / valor asociados a un sitio web, que se guardan en el ordenador del visitante. Una vez colocada la cookie siempre que accedamos a la página ésta podrá leer la cookie y personalizarlos la experiencia. Los sitios web sólo pueden acceder a sus propias y cookies y no a las que hayan guardarlo otros, por lo que es cómodo para guardar información de tipo personal.

Veamos como funciona una cookie en PHP.

Image
1º un navegador va a una página que tiene un script en php en el que hay una llamada la función setCookie()

2º El navegador recibe la página solicitada, con el encabezamiento HTTP setcookie que contiene el nombre (por ejemplo: micookie) y el valor que tiene la cookie.

3º Al recibir este encabezamiento, el navegador crea y guarda el valor especificado como una cookie con el nombre mycookie

4º A partir de ahí todas las peticiones de páginas en ese Site contendrán en el encabezado un HTTP cookie que enviará al servidor la cookie como nombre=valor (micookie=valor)

5º Al recibir una página con una cookie PHP crea una variable con el nombre de la cookie $micookie y con su valor.

En otras palabras, la función setcookie() te permite establecer una variable que estará automáticamente presente en todas las páginas que solicite un navgador. Vamos a ver cómo funciona.

setCookie(nombre [,valor [, expira [, path [, dominio [, seguro ]]]]])
Esta función añade un encabezamiento http a la página por lo que hay que llamarla antes de que aparezca cualquier contenido. Si haces la llamada a la cookie después se producirá un mensaje de error.

El único parámetro obligatorio de las cookies es el nombre, que especifica el nombre de la cookie. Llamar a una cookie que sólo tenga el parámetro nombre de hecho borrará la cookie que haya guardada si es que hay una. El parámetro Valor te permite crear una nueva cookie o modificar el valor que haya guardado.

Por defecto las cookies siguen guardadas en el navegador (y por lo tanto se mandarán junto con las solicitudes de páginas al servidor) hasta que el usuario cierre el navegador. Para que la cookie persista una vez que el usuario cierre el navegador hay que establecer una fecha de expiración utilizando la función time()

La función time() devuelve el número de segundos desde el 1 de Enero de 1970. Supongamos que queremos crear una cookie que dure un año:

1.- Obtenemos el número de segundos transcurridos desde 1970.
2.- Calculamos cuánto es un año en segundos. 1 día = 80.400 segundos (60 segundos * 60 minutos * 24 horas)
3.- Añadimos el número de segundos desde el 1 de enero de 1970 al número de segundos que va a durar la cookie.

Así nuestra cookie sería

setcookie("nombre", "Coder", time() + (86400 *  365);

Con esta función colocaríamos una cookie en el navegador del usuario durante un año. Así durante este tiempo se puede acceder a la variable $nombre desde el script.

Recordemos que para borrar una cookie hay que establecer una cookie con el mismo nombre y sin valor:

setcookie("nombre");

Para borrar una cookie con fecha de expiración, hay que cambiar la fecha a un punto anterior en el tiempo, por ejemplo hace un mes:

setcookie("nombre", " " time() - (86400 *  30);

El path te permite restringir la cookie a un path concreto en el servidor. Por ejemplo si pones el path /manuales/ en una cookie, sólo se enviará la cookie cuando se soliciten archivos situados en el directorio “manuales” o en sus subdirectorios. Esto puede resultar de utilidad cuando se comparte el servidor con otros usuarios con un directorio por usuario.

El dominio sirve para algo parecido. Por defecto, la cookie sólo está accesible para el dominio que la puso. Sin embargo, en muchos sites grandes tienen subdominios del tipo tienda.empresa.com productos.empresa.com para conseguir que la cookie se enviara en ambos casos configuríamos el parámetro del dominio como “.empresa.com” .

NOTA: Atención al “.”, es importante, impide que otraempresa.com tuviese acceso a la cookie al terminar su dominio en empresa.com

Seguro cuando se establece con valor 1, indica al servidor que la cookie sólo debe enviarse cuando se trata de una conexión segura (SSL) con https://

Aunque sólo el nombre es obligatorio, los parámetros son consecutivos, para poder establecer un parámetro debe estar especificado el anterior. Por ejemplo para establecer una cookie con el parámetro dominio es necesario establecer una fecha de expiración. Para omitir parámetros que requieren un valor, puedes establecer los parámetros de texto (valor, path y domáin) como cadenas vacías y los parámetros numéricos (fecha de expiración y seguro) con un valor cero.

Veamos un ejemplo. Supongamos que queremos mostrar un mensaje especial para las personas que nunca nos han visitado previamente, invitándolas a registrase.

setcookie("visita", "1" , time() + (86400 *  365));
if(!isset($visita)) {

/* si no existe la variable $visita es que es la primera vez que accede el usuario */
echo("Bienvenido a tomatoma.ws, date un paseo y coméntanos qué te parece");
}

A primera vista, esto puede parecer incorrecto, la impresión de que el mensaje de bienvenida nunca se va a mostrar ya que colocamos la cookie antes del if. Esto es así porque si lo hiciéramos después, PHP nos daría un error, no se puede establecer una cookie una vez que se ha mandado cualquier tipo de contenido al navegador.

Si recordamos lo que explicamos sobre el funcionamiento de las cookies, veremos que la cookie no se genera hasta que el navegador recibe la página. Así que la cookie no existirá hasta la próxima vez que se solicite la página.
Veamos como haríamos una cookie que contase el número de veces que nos ha visitado un usuario:

<?php

$visitas = $visitas +1;
setcookie("visitas", $visitas, time() + (86400 *  365));
?>

<html>
<head>
<title>Contador de visitas</title>
</head>
<body>

<?php
if($visitas > 1) {
echo ("Hola, nos has visitado $visitas veces");
}else{
echo("Bienvenido a tomatoma.ws, date un paseo y comentanos qué te parece");
}
?>
</body>
</html>

Hay un límite para el número de cookies que cada site puede establecer. La mayoría de los navegadores empezarán a borrar cookies antiguas para hacer sitios a las nuevas a partir de unas 20 cookies. También fuerzan un tamaño máximo para todas las cookies de un sitio. Por lo tanto no es conveniente recargar mucho los sites de cookies pues se nos puede borrar información vital y reservarlas para cosas como el login automático; si se borrara lo único que pasaría es que el usuario tendría que volver a identificarse.

Volver al índice

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s