Saltar la navegación

Cookies y Sesiones

Es muy común encontrar sitios web que requieren que el usuario se auntentique antes de usar el sitio. Es decir, antes de ingresar al sitio, el usuario se encuentra con un formulario donde debe ingresar su usuario y clave. Este comportamiento, a más de otorgar seguridad, tiene la finalidad de que el servidor web "sepa" que el usuario que está navegando por el sitio es él y no otro. Por ejemplo, la tienda Amazon solicita al usuario autenticarse antes de que el cliente pueda realizar compra de artículos. Una vez autenticado el usuario, el ser servidor web sabe que los artículos comprados pertenecen a ese cliente y no a otro.

Como se mencionó, este comportamiento de autenticar al usuario es común pero lamentablemente, el protocolo HTTP por definición no permite tal comportamiento. Al ser un protocolo SIN ESTADO, HTTP no guarda información o "relación" entre las solicitudes que se envían al servidor, es decir, el servidor no tendría manera de saber que el usuario autenticado es el mismo que el que solicita ingresar un artículo al carrito de compra.

Para ayudar al protocolo HTTP a mantener el deseado “estado”, existen dos mecanismos: Cookies y Sesiones.

Cookies

Las Cookies o “galletas informáticas” no son más que ficheros de texto plano creados por el servidor Web y enviados al cliente (navegador).

El funcionamiento de la cookie sucede en estos pasos:

  1. El usuario realiza una petición HTTP desde su navegador
  2. El servidor web recibe la petición y crea el fichero (la cookie) con información relacionada al usuario que se conecta.
  3. El servidor web crea la respuesta HTTP, incluyendo en la cabecera del mensaje HTTP el fichero.
  4. El mensaje HTTP llega al navegador, el navegador encuentra la cookie en la cabecera del mensaje y lo almacena en la memoria del navegador hasta una próxima solicitud HTTP del mismo usuario.
  5. El usuario realiza otra petición HTTP, es decir, el navegador arma el mensaje de petición HTTP, incluyendo en la cabecera la cookie.
  6. El servidor web recibe la petición, encuentra la cookie enviada en la cabecera del mensaje, abre la cookie y sabe que esa petición pertenece al mismo usuario que solicitó la petición del punto 1.

En conclusión, la galleta informática no es más que un fichero de texto creado por el servidor pero que viaja al navegador para almacenarse. Es decir, a pesar de que la cookie fue creada en el servidor web, esta “vive” en la memoria del navegador web.

Sesiones

Las cookies son un buen mecanismo para dotar de estado al protocolo HTTP. No obstante, presentan ciertos problemas de seguridad como, por ejemplo:

  1. Las cookies dependen de la configuración del navegador web. Si en la configuración del navegador quitas el soporte para cookies, las cookies que vienen del servidor web ya no se almacenarán en el navegador, se perderán y con ello el servidor ya no podrá mantener el estado de las peticiones.
  2. En muchos navegadores, el tamaño máximo permitido para una cookie es de 4K. Esto quiere decir que, si la información excede del tamaño permitido, la información no llegará al navegador o la información estará incompleta.
  3. La información guardada en la cookie es fácilmente modificable en el navegador.

Dados estos problemas, una alternativa más segura es dotar de estado al protocolo HTTP mediante sesiones.

Una sesión es una variable global que es almacenada en forma de fichero de texto dentro de un directorio temporal del servidor web.

A diferencia de las cookies donde el fichero de texto se almacena y “vive” en la memoria del navegador, las sesiones son ficheros de texto que se almacenan o “viven” en el servidor web. A pesar de que tanto cookies y sesiones son creadas por el servidor, los dos mecanismos difieren en el lugar en el que " vive" el fichero de texto.

El concepto de sesiones está basado en el concepto de las cookies, es decir, la sesión termina siendo una cookie, pero con la diferencia de que la sesión utiliza la cookie para almacenar el ID de la sesión, más no guarda en la cookie la información del usuario.

La dinámica del funcionamiento de una sesión es la siguiente:

  1. El usuario realiza una petición HTTP desde su navegador
  2. El servidor web recibe la petición y hace lo siguiente:
    1. Crea una sesión y asigna un ID a la sesión creada (cada sesión tiene un único ID)
    2. Crea una cookie y en su contenido pone el ID de la sesión creada.
    3. Envía el mensaje de respuesta HTTP, incluyendo la cookie creada.
  3. La cookie llega al cliente (navegador) y se guarda en la memoria del cliente.
  4. La próxima vez que el usuario realiza una nueva petición, la cookie (que contiene el ID de la sesión) viaja en la solicitud dirigida al servidor web.
  5. El servidor web recibe el mensaje HTTP con la cookie y realiza lo siguiente:
    1. Consulta la información asociada al ID de sesión guardado en la cookie.
    2. Relaciona el ID de la sesión con el fichero de texto guardado en el directorio temporal. Así el servidor sabe que la solicitud la está haciendo el mismo usuario del punto 1.

Estoy seguro de que te preguntarás qué pasaría si se quita el soporte de cookies en el navegador. Pues, la sesión lo tiene esto cubierto ya que, si esto llega a suceder, el ID de la sesión es enviado como parámetro de la cadena de consulta de la URI.

 Tal vez te estés preguntando ¿cuándo deja de existir una sesión? La respuesta a esta pregunta es que una sesión se termina de manera “automática” cuando suceden una de las dos siguientes opciones:

  • Cierras el navegador
  • Se ha cumplido con un tiempo predeterminado en el servidor durante el cual ha habido inactividad en el cliente.