Qué es una sesión y una cookie
Antes vimos que HTTP no recuerda las peticiones anteriores, así que en cada petición nos trata como a un visitante nuevo. Sin embargo, cuando inicias sesión en una tienda en línea, la sesión sigue abierta durante un buen rato. ¿Cómo puede un servidor que lo olvida todo cada vez seguir reconociéndote? El secreto está en un pequeño pase.
Un servidor olvidadizo, una sesión que debería cerrarse
Cuando un servidor HTTP termina de atender una petición, se olvida de nosotros por completo. Así que, cuando llega la siguiente petición, vuelve a tratarnos como a un visitante nuevo.
Aquí aparece algo raro. Solo iniciaste sesión una vez, entonces ¿por qué la sesión sigue abierta aunque pases de una página a otra? Si el servidor de verdad lo olvidara todo cada vez, tendrías que escribir tu usuario y tu contraseña de nuevo en cada página que abrieras.
Pulsa el botón de visita. El servidor olvidadizo lo olvida todo cada vez, así que en cada visita se cierra la sesión y hay que volver a iniciarla.
Como ves, así es demasiado incómodo. Tener que iniciar sesión cada vez que abres una página cansaría a cualquiera enseguida.
Pero tampoco se le puede pedir al servidor que memorice la cara de cada visitante. Las peticiones no tienen cara, y los visitantes son incontables. Por eso se usa un truco: en lugar de memorizar, el servidor le da a cada visitante una pequeña entrada.
El servidor entrega un pequeño pase
Cuando un visitante llega por primera vez, el servidor envía una pequeña entrada junto con su respuesta. Esa entrada se llama cookie, y el navegador la recibe y la guarda. En ella hay un número escrito, algo así como "eres el visitante número 7".
Piensa en la pulsera que te ponen en la entrada de un parque de atracciones. Los números reales están hechos de caracteres largos y aleatorios para que nadie pueda adivinarlos. Al servidor le basta con emparejar ese número con la información del visitante, así que no necesita memorizar la cara de incontables visitantes.
Ahora el visitante tiene en la mano un pase con un número. Por su parte, el servidor anota ese número en su lista, unido a ese visitante. Datos como qué hay en el carrito o si el visitante inició sesión van en la misma línea.
Lo importante es que el pase lo lleva el visitante. El servidor no lo memoriza todo; es el visitante quien guarda su propio número. Entonces, ¿cuándo hay que sacar el pase y volver a mostrarlo?
Mostrar el pase en cada petición
El navegador guarda el pase que recibió y, cada vez que envía una petición al mismo sitio, lo presenta solo, como si dijera: "Soy el visitante número 7". La persona que usa el navegador no tiene que hacer nada.
Es como escribir el número en una esquina de cada hoja de petición, así que el servidor sabe de un vistazo quién la envió. El pase también tiene fecha de caducidad, y cuando esa fecha pasa, el navegador deja de presentarlo.
Pulsa el botón de visita. El visitante presenta el número del pase junto con la petición, cada vez.
Ahora el visitante envía el mismo número con cada petición. Visto desde el servidor, cada vez que llega una petición, llega también un número.
El servidor sigue sin poder memorizar al visitante, pero como el número viaja con la petición, no hay problema. Entonces, ¿qué hace el servidor con ese número? Le basta con compararlo con la lista que anotó.
¡Ah, es esa persona!
Cuando llega el número del pase, el servidor abre la lista que guardó y busca: "¿Quién era el número 7?". Al encontrar el 7 en la lista, te reconoce: "¡Ah, es esa persona!". El carrito y el estado de la sesión siguen intactos en esa línea.
Recordar así, a lo largo de muchas peticiones, que se trata del mismo visitante se llama sesión. Gracias a la sesión, la cuenta sigue abierta aunque pases de una página a otra. Cuando pulsas cerrar sesión, el servidor borra esa línea de su lista y el pase deja de servir.
Toca el número del pase que llegó. El servidor lo encuentra en la lista, dice "¡Ah, es esa persona!" y mantiene la sesión abierta.
Era un servidor olvidadizo, y ahora nos reconoce sin esfuerzo. El secreto no es que el servidor memorizara algo, sino que el visitante llevaba un pase. El servidor solo tiene que comparar números con su lista, así que atiende sin problema a cualquier cantidad de visitantes.
Pero hay algo con lo que hay que tener cuidado: cualquiera que tenga el número correcto pasa como ese visitante. ¿Qué ocurre si alguien, por el camino, espía o roba el número del pase de otra persona?
En resumen
En pocas palabras: HTTP no recuerda las peticiones anteriores, así que nos trata cada vez como a un visitante nuevo. Por eso el servidor le da a quien llega por primera vez un pequeño pase con un número: una cookie.
El navegador envía ese pase con cada petición, y el servidor compara el número con su lista y dice: "¡Ah, es esa persona!". Recordar así que se trata del mismo visitante es la sesión. El trabajo de recordar queda en manos del pase del visitante, y el servidor solo compara el número.
Toca en orden los puntos clave para repasar. (el olvido es el problema → entregar un pase (cookie) → mostrarlo en cada visita → ¡ah, es esa persona! (sesión))
Ahora ya sabes cómo un servidor vuelve a reconocernos. Pero lo único que comprueba el servidor es el número del pase; no puede saber si quien lo lleva eres de verdad tú.
Por eso es grave que otros vean el número por el camino. La próxima lección trata de HTTPS, que pone un candado a los datos que viajan para que nadie pueda espiarlos por el camino. Cómo se comprueba con una contraseña que alguien es de verdad quien dice ser se ve con detalle en el área de seguridad.