- ¿Qué son las Cookies?
- ¿Para qué se usan las Cookies?
- Cómo trabajar con Cookies en Flask
- Caso práctico: carrito de compras
- Datos importantes sobre las Cookies
En esta lección vamos a explorar las cookies en aplicaciones web. Veremos qué son, para qué sirven y cómo usarlas en Flask.
Lo haremos de forma práctica y sencilla, como si estuviéramos charlando entre amigos. Si ya llevas un tiempo con Python y Flask, este tema será perfecto para ti.
¿Qué son las Cookies?
Imaginemos que entras a una tienda en línea y agregas productos a tu carrito. Luego cierras la página y al volver… ¡tu carrito sigue ahí! Eso sucede gracias a algo llamado cookies.
Estas cookies se guardan como pares de clave y valor, como por ejemplo:
| Clave | Valor |
|---|---|
| carrito | ["camisa", "pantalón"] |
| usuario_id | 38 |
Cada vez que se hace una nueva solicitud a ese servidor, el navegador le manda estas cookies para que el servidor recuerde quién eres y qué hacías.
Esto es importante porque HTTP, el protocolo que usan los navegadores para comunicarse con los servidores, no guarda ningún estado entre petición y petición. Es decir, cada vez que haces clic o cargas algo, es como si llegaras desde cero, y las cookies ayudan a mantener esa continuidad entre tus visitas.
¿Para qué se usan las Cookies?
En una web real, las cookies se usan para cosas como:
🍪 Recordar que ya iniciaste sesión.
🍪 Guardar los productos que agregaste al carrito de compras.
🍪 Personalizar la experiencia del usuario.
🍪 Y sí… también para mostrarte publicidad relacionada con lo que buscaste hace poco (gracias, Google).
Cómo trabajar con Cookies en Flask
Ahora sí, pasemos a la práctica. Flask nos da unas herramientas muy fáciles de usar para trabajar con cookies. Vamos a ver cómo leer las cookies que llegan del navegador y cómo enviar nuevas cookies desde el servidor.
Cómo leer cookies con request.cookies
Cuando un usuario hace una solicitud, podemos acceder a sus cookies usando request.cookies, que funciona como un diccionario:
from flask import Flask, request
app = Flask(__name__)
@app.route("/get_cookies")
def get_cookies():
# Extrae la cookie con clave 'foo'
foo = request.cookies.get("foo") # Si no existe, devuelve None
print("cookies = ", foo)
return f"La cookie 'foo' vale: {foo}"
Este ejemplo busca una cookie llamada foo y la imprime en la consola.
Cómo enviar cookies con response.set_cookie()
Para enviar cookies al navegador, Flask usa el método set_cookie() sobre el objeto response. Veamos:
from flask import Flask, make_response
app = Flask(__name__)
@app.route("/set_cookies")
def set_cookies():
# Creamos la respuesta personalizada
response = make_response("Cookie 'foo' fue creada.")
# Agregamos una cookie con nombre 'foo' y valor 'the bar'
response.set_cookie("foo", "the bar")
return response
Una vez que abras la ruta /set_cookies, se enviará una cookie al navegador y estará disponible para futuras visitas.
Caso práctico: carrito de compras
Un ejemplo muy útil donde se aplican las cookies es en un carrito de compras. Imagina una app donde el usuario va agregando productos uno a uno. Vamos a guardar esos productos directamente dentro de una cookie llamada "cart".
Primero, importamos las librerías necesarias:
from flask import Flask, make_response, request, redirect
import json
app = Flask(__name__)
Ahora el código para agregar un nuevo producto a la cookie del carrito:
@app.route('/cart-items')
def cart_items():
# Obtenemos el producto desde la URL, ej: /cart-items?item=camisa
item = request.args.get('item')
# Leemos la cookie 'cart', si no existe usamos una lista vacía
cart = json.loads(request.cookies.get('cart', json.dumps([])))
# Agregamos el nuevo producto al carrito
cart.append(item)
# Volvemos a codificar la lista a formato string JSON
encoded_cart = json.dumps(cart)
# Creamos la respuesta y guardamos la nueva cookie
response = make_response(redirect('/')) # Redirigimos a otra ruta
response.set_cookie('cart', encoded_cart)
return response
¿Qué está pasando aquí?
- Usamos
request.args.get()para leer el producto enviado por URL. - Leemos la cookie
carty la decodificamos desde una cadena JSON a lista de Python. - Agregamos el nuevo producto a la lista.
- Volvemos a codificar esa lista a una cadena JSON.
- Finalmente, guardamos esta cadena como cookie usando
set_cookie.
Así, el carrito del usuario queda guardado cada vez que agrega algo.
Datos importantes sobre las Cookies
| Característica | Detalles |
|---|---|
| Tamaño máximo | Aproximadamente 4 KB |
| Almacenamiento | Se guardan en el navegador del cliente |
| Seguridad | Los datos pueden ser leídos fácilmente si no se cifran |
| Codificación | Solo puedes guardar texto; estructuras complejas deben codificarse (como JSON) |
En general, si necesitas guardar más datos o datos sensibles, es mejor usar sesiones, algo que veremos en la próxima lección.
Resumen
- Las cookies permiten recordar información del usuario entre diferentes peticiones (como si iniciamos sesión o llevamos productos en un carrito).
- En Flask, puedes:
- Leer cookies con
request.cookies.get("clave"). - Enviar cookies con
response.set_cookie("clave", "valor"). - Las cookies solo permiten guardar datos pequeños (máximo unos 4 KB).
- Para datos más complejos (como listas o diccionarios), puedes usar
json.dumps()yjson.loads()para convertirlos a texto. - Las cookies no son seguras por sí solas, por lo cual no debes guardar información sensible en ellas sin cifrar.
Nos vemos en la siguiente lección, donde aprenderemos a trabajar con sesiones, una alternativa segura y flexible para manejar información del usuario.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.