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