'' Cookies

Por Pedro Pascua




Introducción

Una cookie no es más que un pequeño grupo de datos que guarda el browser asociado a una página concreta de un sitio web. Estos datos se utilizan normalmente para almacenar preferencias y otras variables de estado u opciones establecidas por un usario dentro de una página y poder actualizarlas cuando este usuario vuelva a visitar dicha página. Las cookies se diseñaron originalmente para la programación de scripts CGI y a bajo nivel se han implementado como una extensión del protocolo HTTP. Los datos de las cookies se transmiten automáticamente entre el browser y el servidor web de modo que los scripts CGI del servidor puedan leer y escribir los valores que han sido almacenados en el cliente. Como veremos después, mediante código JavaScript en el cliente, podemos leer y escribir cookies de forma sencilla utilizando la propiedad Document.cookie. Esta propiedad permite leer, crear, modificar y borrar cookies que se apliquen a la página web en la que nos encontremos. La forma de hacerlo la veremos después. Primero debemos explicar varias cosas importantes a tener en cuenta cuando se van a utilizar cookies:

  • Por defecto, las cookies no son persistentes, sino que su valor sólo permanece durante la sesión abierta del browser. En el momento en que salimos del browser, estos datos se pierden. Para que los datos de una página permanezcan para posteriores sesiones, deberemos especificar una fecha de caducidad para sus cookies mediante la propiedad expires. De este modo obligaremos al browser a guardar dicha información en un fichero local hasta que pase la fecha.
  • Otro punto importante a tener en cuenta es que las cookies en principio van asociadas a las páginas web. Esto implica que la información de una cookie es local para la página web en la que ha sido creada y todas la páginas que se encuentren en ese mismo directorio o subdirectorios de éste. Para permitir que esta información se extienda a más páginas dentro del servidor por el que estamos navegando, podemos utilizar la propiedad path. De este modo, cualquier página del servidor que contenga el path en su dirección URL tendrá acceso a estos datos. Por ejemplo, si guardamos información de la página http://mi.servidor.com/paginas/revista/index.htm, el path por defecto será "/paginas/revista" y por ejemplo, los datos no serían visibles para la página http://mi.servidor.com/paginas/ficheros/download.htm a no ser que establezcamos la propiedad path = "/paginas" con lo cual ambos subdirectorios compartirán cookies.
  • De modo análogo, las cookies sólo son accesibles para las páginas del servidor web en el que han sido establecidas. Es decir, que si un sitio web tiene varios servidores, servidor1.dominio.com , servidor2.dominio.com,... etc. , y una cookie se establece en una página alojada en servidor1.dominio.com, no será accesible para las páginas del servidor2 de no ser que establezcamos la propiedad domain = "dominio.com", con lo que tendremos acceso compartido desde todos los servidores *.dominio.com .
  • Finalmente comentar que la cookies pueden ser seguras o inseguras. Normalmente son inseguras lo que implica que se trasmiten a través de conexiones normales HTTP. Si marcamos una cookie como segura (mediante la propiedad secure ), ésta sólo se transmitirá cuando el browser y el servidor web están conectados a través de una conexión segura HTTPS.

 

Leyendo Cookies

Cuando se utiliza la propiedad cookie en una expresión JavaScript, el valor que obtenemos es una cadena que contiene todas las cookies que se aplican al documento actual. La cadena es una lista de pares nombre=valor separados por comas, donde nombre es el nombre de la cookie y valor es su valor asignado. Una vez obtenida la lista, podemos utilizar las funciones String.indexOf() y string.substring() para obtener el valor de una cookie concreta, o bien usar la función String.split() para separar la cadena en cookies individuales.

El valor de una cookie no debe contener comas, puntos y comas ni espacios en blanco. En caso de necesitar guardar cadenas que contengan estos caracteres, deberemos utilizar la función JavaScript escape() para codificar estos valores antes de guardarlos y su función inversa unescape() para decodificarlos cuando queramos leerlos.

 

Guardando Cookies

Para asociar una cookie temporal con el documento actual, simplemente hay que asignar a la propiedad cookie una cadena de la forma nombre=valor.

La próxima vez que leamos la propiedad cookie, el par nombre/valor aparecerá incluido en la lista de cookies del documento.

Si queremos que la cookie permanezca para futuras sesiones del browser sobre la página, debemos incluir una fecha de caducidad. Para ello, la cadena que asignamos a la propiedad document.cookie debe tener la forma: nombre=valor ; expires=date . En este caso hay que asegurarse de que el valor de la fecha date, debe especificarse en el formato devuelto por la función Date.toGMTSting().

De modo análogo, podemos especificar para cada cookie las propiedades que hemos visto antes:

; path = path

; domain = dominio

; secure

Para cambiar el valor de una cookie, basta con volver a establecer su valor del mismo modo que cuando se crea. Para borrarla, podemos volver a asignar a su nombre un valor arbitrario y una fecha de expiración ya pasada, con lo que el browser la eliminará por estar caducada.

 

Limitaciones

Las cookies hay que entenderlas como una forma esporádica de guardar pequeñas cantidades de datos pero no como un mecanismo de comunicación más general y conviene usarlas con moderación. Hay que tener en cuenta que los browsers no suelen guardar más de 300 cookies en total, ni más de 20 por servidor web. Además, cada cookie no puede almacenar más de 4 Kb. Lo más restrictivo suele ser la limitación de 20 cookies por servidor, por lo que a veces hay que intentar guardar más de un dato por cada nombre de cookie en vez de asignar una cookie para cada variable.