- ¿Qué es una sesión?
- ¿Cómo funciona una sesión en Flask?
- Ventajas de las sesiones sobre las cookies
- Ejemplo práctico: Contador de visitas
- Carrito de compras con sesión
- Cómo eliminar una sesión
- Configuración y almacenamiento de sesiones
Aprendiste a trabajar con cookies en Flask, ¿cierto? Pues bien, a medida que los programas crecen, usar cookies directamente puede volverse difícil de manejar, especialmente cuando se necesita guardar más datos o datos más complejos.
En esta lección vamos a ver cómo usar las sesiones en Flask, una herramienta que hace todo más fácil y seguro.
¿Qué es una sesión?
Cuando un usuario accede a tu app web, necesitas una forma de identificarlo para que puedas reconocerlo si vuelve. Aquí es donde entra la sesión.
Flask (y otros frameworks web) implementa las sesiones encima de las cookies: el navegador del usuario guarda una cookie con una clave única, y con esa clave Flask encuentra los datos en el servidor o incluso en la misma cookie (ya te explico eso más adelante).
¿Para qué sirven las sesiones?
- Identificar usuarios (muy útil para el inicio de sesión)
- Guardar datos entre solicitudes (como el número de visitas o el carrito de compras)
- Evitar lidiar manualmente con cookies
¿Cómo funciona una sesión en Flask?
Trabajar con sesiones en Flask es muy parecido a trabajar con un diccionario de Python. Estas son las tres operaciones principales:
1. Iniciar sesión
Generalmente no necesitas hacer nada explícito: si accedes a session, Flask crea la sesión automáticamente si aún no existe.
2. Escribir en la sesión
Guardas datos así como lo harías con un diccionario. Ejemplo:
session['usuario'] = 'camila'
3. Leer desde la sesión
Igual de fácil:
nombre = session.get('usuario')
Ventajas de las sesiones sobre las cookies
| Cookies | Sesiones (en Flask) |
|---|---|
| Hay que codificar y decodificar datos | Flask maneja esto automáticamente |
| Limitadas en tamaño | En sesiones se puede almacenar más información (según la configuración) |
| Menos seguras | Las sesiones se pueden firmar con una clave secreta o guardar en el servidor |
| Gestión manual del borrado | Flask ofrece métodos cómodos como session.clear() |
Ejemplo práctico: Contador de visitas
Vamos a ver un ejemplo sencillo que cuenta cuántas veces un usuario ha visitado la página:
import os
from flask import Flask, session
app = Flask(__name__)
# Clave secreta para firmar la cookie de sesión (muy importante)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') # Debes definir esto en las variables de entorno
@app.route('/')
def index():
# Si no existe el contador en la sesión, lo creamos en 0
if session.get('contador') is None:
session['contador'] = 0
else:
session['contador'] += 1
return f"Has visitado esta página {session['contador']} veces."
💡 Nota: session se comporta como un diccionario, y los datos que metas ahí se mantienen entre visitas (hasta que se borren explícitamente).
Carrito de compras con sesión
Antes debíamos guardar el carrito directamente en cookies, codificando y decodificando datos con JSON. Con sesiones es mucho más limpio:
from flask import Flask, session, request, redirect
app = Flask(__name__)
app.config['SECRET_KEY'] = 'una_clave_secreta_bien_segura'
@app.route('/cart-items')
def cart_items():
item = request.args.get('item')
if 'cart' not in session:
session['cart'] = []
session['cart'].append(item)
return redirect('/')
Ahora, el carrito vive dentro de la sesión del usuario, sin convertir cosas a JSON ni preocuparnos por el espacio en las cookies.
Cómo eliminar una sesión
¿Quieres cerrar la sesión después de que el usuario salga?
Para eliminar los datos almacenados en la sesión (logout, por ejemplo), Flask ofrece un método sencillo:
@app.route('/logout')
def logout():
# Elimina todos los datos de la sesión
session.clear()
return redirect('/')
Esto limpia completamente los datos del usuario logueado. La cookie se mantiene, pero ya no contiene datos útiles.
Si deseas eliminar completamente la cookie (aunque no es obligatorio), se puede hacer usando las herramientas de manejo de respuesta, pero muchas veces con session.clear() es suficiente.
Configuración y almacenamiento de sesiones
Por defecto, Flask guarda toda la información de la sesión en la propia cookie del navegador, pero firmada criptográficamente usando la clave secreta (SECRET_KEY). Eso significa que:
- El cliente no puede modificar los datos (sin romper la firma)
- La app puede confiar en el contenido recibido
Si quieres guardar sesiones en el servidor (por ejemplo, en un archivo o base de datos), puedes usar extensiones como Flask-Session.
Ejemplo básico de configuración para guardar en archivos:
from flask_session import Session
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
Resumen
- Las sesiones permiten almacenar información del usuario entre solicitudes.
- Son más seguras y convenientes que las cookies directas.
- En Flask,
sessiones como un diccionario que persiste entre visitas. - Se necesita especificar
SECRET_KEYpara que Flask firme correctamente la cookie. - Puedes borrar una sesión con
session.clear(). - Por defecto, Flask guarda los datos de sesión firmados en cookies; puedes cambiarlo para usar el servidor.
- Úsalas, por ejemplo, para contar visitas o guardar la lista del carrito de compras, sin complicarte con serialización manual.
Para profundizar más: consulta la documentación oficial de Flask sobre sesiones.
Trabajo independiente
- Implementa una abstracción del repositorio.
- Cambia la forma de almacenar usuarios a sesión.
Aplicación de referencia
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.