Si te estás iniciando en el mundo del desarrollo web, seguramente hayas oído hablar sobre ellas, incluso puede que las hayas usado, pero quizás no entiendas muy bien lo qué son y qué posibilidades nos dan. En este artículo intentaré que os quede todo claro.

Autor:

Intentando mejorar cada día en este mundo tan cambiante de la programación. Sígueme en Twitter o en GitHub. Actualmente estoy disponible para contratar.

¿Que es una Cookie?

Una cookie es información enviada desde un servidor de páginas web y almacenada en el disco duro del visitante a través del navegador. Esta información será reenviada de nuevo al servidor en cada petición, de forma que el servidor puede identificar o recuperar información sobre el usuario que está accediendo.

¿Por qué se han creado las cookies?

Las cookies fueron implementadas por primera vez por Netscape Communications para la creación del típico cesto de comprar en una tienda online. El problema hasta entonces era que el protocolo HTTP carecía de la posibilidad de mantener información pos sí mismo. Los métodos usados antes eran:

  • Identificación por IP: un método muy poco fiable, pues bajo una misma IP podían estar accediendo distintos usuarios (por ejemplo desde un cíber), además que la dirección IP de un usuario puede cambiar.
  • Por URL: Consiste en añadir la información en la URL, despues del interrogante ?. Esta es una técnica más precisa en lo que se refiere a identificación, pero tiene problemas de seguridad.

Gracias a las cookies, un servidor web puede identificar un conjunto pc-navegador-usuario y mostrar la información adecuada a ese conjunto, por ejemplo un carrito de compra que haya creado.

¿Son inseguras las Cookies?

Existe una tendencia entre la gente a pensar que las cookies son una especie de virus o gusano. Esto es debido a que las cookies están en muchas ocasiones vinculadas a temas de spyware.

La fama, la tendencia a pensar que las cookies son inseguras o malas se ha debido a que en numerosas ocasiones han sido vinculadas a temas de Spyware y otro tipo de situaciones comprometidas para el usuario.

Muchas empresas de publicidad las utilizan para hacer un seguimiento de los hábitos de navegación del usuario. Esto, a mucha gente le parece que es un asalto a la privacidad y por ello las cookies tienen sus detractores.

Sin embargo, el uso de cookies, a día de hoy, y con un navegador actualizado, no suponen ningún tipo de riesgo para el PC ni los datos almacenados en él.

¿Cómo se crea una Cookie?

Vamos a entrar en algo más técnico y ver como se establecen / reciben cookies a través del protocolo HTTP. Cuando entramos en una web, por ejemplo http://www.example.com/index.html, el navegador enviará una petición al servidor parecida a esta:

GET /index.html HTTP/1.1

Entonces el servidor hará lo que tenga que hacer para generar el contenido y devolverá algo así:

HTTP/1.1 200 OK
Content-type: text/html
(contenido de la página)

Si desde el servidor se quiere guardar una cookie en el ordenador del usuario, añadirá lo siguiente a su respuesta:

Set-Cookie: Name=el valor de la cookie; expires=Fri, 23-Jul-2010 23:59:59 GMT; path=/; domain=.example.com

Vamos a ver por partes qué significa esa línea:

  • Set-Cookie: Es el identificador que reconocerá el navegador para saber que se va a crear una cookie.
  • Name=valor de la cookie: Es el conjunto clave valor de la cookie. Name es el nombre identificado, siendo su valor lo que va inmediatamente después del signo igual (=). El valor pueden contener textos y números.
  • expires: Establece cuando la cookie dejará de existir. Si no se establece, lo cookie ser borrará al cerrar el navegador. Si se establece un tiempo inferior al actual, tambien se borrará.
  • domain: Establece el dominio al que la cookie será enviada. Si el valor es por ejemplo, ‘.example.com’, la cookie será enviada a cualquier subdominio existente en example.com. Si se le diese el valor img.example.com, la cookie solo sería enviada a ese subdominio, descartando también al propio example.com .
  • path: Establece el directorio al que afecta la cookie. Si por ejemplo se establece a ‘/user’, la cookie solo existirá en example.com/user. Es importante destacar que path y domain trabajan de forma conjunta.

Crear y leer cookies en PHP

Vamos a llevar todo esto tan teórico a la práctica usando PHP como lenguaje de programación. En php existe la función setcookie para crear o eliminar cookies y la variable global $_COOKIE para acceder a su contenido.

La funcion setcookie tiene la siguiente definición:

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

Supongo que puedes vincular fácilmente cada parámetro con los valores que hemos listado en la sección anterior excepto $secure$httponly.

  • $secure establece si la cookie debe solamente funcionar bajo conexiones protegidas por SSL.
  • $httponly es para indicar si la cookie es solo accesible a través del protocolo HTTP, evitando así el acceso desde lenguajes de scripting como Javascript. Esto puede ayudar a reducir bastante los ataques XSS.

Veamos algunos ejemplos prácticos.

Ejemplo de creación de cookies

<?php
$value = 'valor que se quiere guardar';
setcookie("TestCookie", $value, time()+3600);  /* expire en 1 hora */
setcookie("TestCookieDomain", $value, time()+3600,"/","tests.example.com");

Accediendo a las cookies

<?php
/*Antes de acceder a una cookie, se comprueba si se ha enviado*/
if(isset($_COOKE['TestCookie'])){
     var_dump($_COOKIE['TestCookie']);
}

Borrando cookies

<?php
/*Tiempo de expiración pasado, borra la cookie*/
setcookie ("TestCookie", "", time() - 3600);

Apuntes sobre seguridad

Hay que tener mucho cuidado cuando se crean o leen cookies ya que existen muchos ataques que se aprovechan de excesos de confianza / desconocimiento del programador.

  • Nunca almacenes información privada en una cookie: Un ejemplo muy común de uso de cookies es la creación de sesiones con la opción “Recordarme”. En esta clase de webs, el usuario es recordado y no tiene que volver a escribir sus credenciales para iniciar sesión. Si estás pensando en almacenar el usuario y la contraseña en las cookies, vas por mal camino, pues es fácil acceder a la información de las cookies a través de un sniffer u otros ataques. Para que no os quedéis con la duda, lo que se suele hacer es generar un código aleatorio que identifique la sesión del usuario.
  • Nunca te fíes del contenido de una cookie: Si bien las cookies funcionan de forma totalmente transparente al usuario y no tiene, a simple vista, formas de modificarlas, no te puedes fiar del contenido que envíen. Existen múltiples herramientas que permiten modificar / crear las cookies de forma que un usuario avanzado podría hacer grandes destrozos en el servidor. Valida siempre el valor de las cookies para comprobar que tienen lo esperado y no, por ejemplo, inyección de código.

Conclusión

Las cookies han sido diseñadas para mejorar la experiencia del usuario en la web. Sin ellas no se habrían podido crear las primeras páginas con inicios de sesión y por lo tanto no llegarían a existir webs como Facebook o GMail.

Las cookies por tanto, aunque tengan mala fama entre las personas no-técnicas, son imprescindibles :) .

¡Nos vemos en el próximo tutorial!

¿Necesitas desarrollar un proyecto web o para móviles? ¡Estamos disponibles!

Visitar Cokidoo

Cokidoo, los creadores de Ontuts, desarrollamos proyectos tecnológicos centrados en redes sociales y aplicaciones web, aplicaciones móviles y consultoría web y bases de datos.

Somos jóvenes, inquietos, versátiles, apasionados por la innovación y enfocados en las nuevas tecnologías. Con Ontuts tratamos de compartir nuestro conocimiento adquirido en los distintos proyectos, ayudando a la comunidad y mostrando nuestra capacidad tecnológica.

Si necesitas un presupuesto sin compromiso, estamos disponibles, no dudes en contactar con nosotros.

Comentarios en esta publicación (5 comentarios)

¿Te ha gustado esta publicación? ¡Puedes compartir tu opinión con todos nosotros! Simplemente pincha aquí mismo.

Me ha gustado, muy explicativo.
Eso, si, lo del código aleatorio con la sesión del usuario puede resultar confuso, así sin explicarlo un poco más.

Me ha parecido una gran idea el ir publicando tutoriales de iniciación como este… uno de sesiones en PHP creo que ayudaría a muchos ;)

OLY

MUY BONITO TODO PERO NECESITO SABER COMO ACCEDER A ELLAS

Gracias por la explicacion y quiero ingresarles