7.2.1.6. Cookies

Ya se ha dicho que HTTP es un protocolo sin estado, esto es, que cada conexión es independiente de las que se ha producido antes. Sin embargo, estamos acostumbrados a que al identificarnos en la página de un banco o de un foro, la aplicación web recuerde quienes somos durante toda la sesión. Para posibilitar este concepto de estado los desarrolladores del antiguo Netscape Navigator crearon las cookies.

Las cookies funcionan de la siguiente manera:

7.2.1.6.1. Establecimiento

Al conectar a un sitio y pedir un recurso, la respuesta con el recurso puede contener[1] uno o varios campos Set-Cookie, cada uno de ellos establece una cookie diferente. La sintaxis de este campo es la siguiente:

Set-Cookie: <nombre>=<valor>; Max-Age=<Segundos>; Domain=<Dominio>; Path=<Ruta>

La única parte obligatoria es <nombre>=<value> que es la que establece el nombre y valor de la cookie. Una cookie no es más que esto: un nombre al que se le asigna un valor. Por ejemplo, un foro que permitiera a los usuarios escoger un determinado estilo de visualización podría enviar una cookie así:

Set-Cookie: estilo=clasico

que significaría que el usuario prefiere el estilo «clasico». Max-Age establece en segundo el tiempo máximo de vigencia de la cookie en segundos, después del cual el navegador la considerará caducada y la borrará. Un valor de 0 provoca el efecto de borrar la cookie previamente almacenada en el navegador. También se puede asignar un valor negativo (típicamente -1) para expresar que la cookie es de sesión, es decir, que el navegador debe desecharla al cerrarse.

En vez de Max-Age, puede usarse Expires que indica la fecha y hora de caducidad de la cookie. De hecho, los navegadores antiguos como IE8, sólo entienden Expires.

Cuando Set-Cookie no incluye ni Expires ni Max-Age, la cookie es de sesión.

Domain sirve para indicar el sitio en el que la cookie tiene valor. Si no se incluye, el cliente entenderá que es aplicable en el sitio que está visitando. Lo habitual es que este campo no se incluya, ya que no tiene demasiado sentido pedir al navegador que en un sitio almacene información para otro. De hecho, las cookies que obran así, se denominan cookies de terceros y no suelen tener buenas intenciones, por lo que los navegadores suelen estar configurados para rechazarlas.

Path es la ruta debajo de la cual tiene validez la cookie, es decir, si su valor es /, la cookie será válida en todo el dominio que indique Domain. En cambio, si su valor es /docs, tendrá validez en todas las páginas del dominio cuya ruta empiece por este directorio, pero no, por ejemplo, en la página principal.

Nota

Set-Cookie puede contener otras partes como Secure o HttpOnly.

7.2.1.6.2. Uso

Cuando se ordena a un navegador realizar una conexión para obtener un recurso web, este consulta las cookies que tiene almacenadas y escoge aquellas pertinentes, es decir, aquellas que se corresponden con el dominio del recurso y cuta ruta esta contenida en la ruta del recurso. Por ejemplo, si el recurso es:

http://www.example.net/docs/subdocs/documento.html

se escogerían todas las cookies del dominio www.example.net y aquellas cuya ruta fuera /, /docs o /docs/subdocs. Con todas las cookies seleccionadas, se forma el campo Cookie:

Cookie: nombre1=valor1, nombre2=valor2, nombre3=valor3

que se envía en la cabecera de petición.

Notas al pie