Sesión en Flask: cómo almacenar y gestionar datos del usuario

Video thumbnail

Cuando desarrollamos una aplicación web con Flask, llega el momento en que necesitamos mantener información del usuario entre peticiones: quién inició sesión, qué hay en su carrito o qué preferencias eligió y no solamente mensajes temporales que duran una petición como lo son, los mensajes flash en Flask

Ahí entra en juego la Session en Flask, una herramienta ligera y muy útil para gestionar datos temporales del lado del servidor (o del cliente, según la configuración).

El uso de la sesión en cualquier sistema web se utiliza para almacenar información relacionada con un usuario en la misma se guardan datos como el del nombre, identificador, es decir, de un usuario autenticado como veremos en la siguiente sección; de momento, no tenemos un uso para la misma así que seguiremos empleando la sesión en posteriores capítulos y veremos algunos ejemplos de su uso.

Otro ejemplo común del uso de la sesión es de los carritos de compras, para registrar cada uno de los productos que se van a comprar.

Los datos almacenados en la sesión son datos temporales, ya que la sesión eventualmente caducará.

Usualmente se va modificando la sesión, entiéndase agregando, actualizado y eliminando referencias a medida que se realizan peticiones al servidor, por ejemplo, cuando un usuario se va a autenticar tras un login exitoso, se registran los datos del usuario autenticado en la sesión, cuando va a cerrar sesión, se destruyen estos datos, si tienes un carrito de compra, al momento de hacer la compra, se eliminan todos estos datos de la sesión.

Qué es una sesión en Flask y para qué sirve

Una sesión es un espacio de almacenamiento temporal que guarda información entre distintas solicitudes HTTP. En Flask, cada usuario tiene su propia sesión, identificada mediante una cookie segura.

Por ejemplo, cuando un usuario inicia sesión correctamente, su nombre o ID pueden guardarse dentro de la sesión para reconocerlo en cada visita. En mi caso, suelo usarla justo para eso: almacenar los datos del usuario autenticado sin tener que pedirlos de nuevo en cada página.

Para utilizar la sesión se debe de establecer una clave secreta, la cual, se encuentra establecida desde el inicio del proyecto en el archivo de configuración:

app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

Diferencias entre sesión y cookies

Aunque ambas permiten guardar información entre peticiones, hay diferencias clave:

Aspecto    Cookie    Session
Ubicación de los datos    Navegador del usuario    Servidor (o cifrados en cookie firmada)
Seguridad    Menor    Mayor (firma y cifrado)
Duración    Según configuración    Caduca automáticamente o manualmente

⚙️ Configurar la sesión en un proyecto Flask

Antes de usar la sesión, necesitamos configurar una clave secreta que Flask usa para firmar las cookies y evitar manipulaciones.

Puedes hacerlo directamente en tu archivo principal o en una configuración personalizada en Flask:

from flask import Flask
app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

Para usar la sesión, debemos de importar el objeto llamado session que forma parte del framework:

from flask import session

Con esto, podemos establecer datos como en la sesión como si fuera un array:

session['username'] = 'user'

Y obtener estos datos mediante:

session['username']

O remover los datos:

session.pop('username', None)

Puedes ver un ejemplo completo, implementando los siguientes controladores en algún archivo de pruebas:

from flask import session
***
@app.route('/test/session/check')
def test_session_check():
    if 'username' in session:
        return 'Logged in as '+session["username"]
    return 'You are not logged in'

@app.route('/test/session/set')
def test_session_set():
    session['username'] = 'user'
    return 'Test'

@app.route('/test/session/pop')
def test_session_pop():
    session.pop('username', None)
    return 'Test'

Y evaluar el resultado.

Ejemplos prácticos de uso de session

Veamos un pequeño módulo de prueba con tres rutas para probar la sesión en acción:

from flask import Flask, session
app = Flask(__name__)
app.secret_key = 'clave_super_secreta'
@app.route('/test/session/set')
def test_session_set():
   session['username'] = 'user'
   return 'Sesión creada para user'
@app.route('/test/session/check')
def test_session_check():
   if 'username' in session:
       return f'Usuario autenticado: {session["username"]}'
   return 'No hay sesión activa'
@app.route('/test/session/pop')
def test_session_pop():
   session.pop('username', None)
   return 'Sesión eliminada'

Mantener datos de usuario tras el login

Cuando un usuario inicia sesión, basta con asignar sus datos a session. Esto permite identificarlo en cualquier parte de la aplicación mientras dure su sesión activa.

️ Implementar un carrito de compras

En otro proyecto, utilicé la sesión para guardar una lista de productos así:

session['cart'] = ['Libro A', 'Libro B']

Y al finalizar la compra, bastaba con limpiar los datos:

session.pop('cart', None)

Extensión Flask-Session: sesiones del lado del servidor

Por defecto, Flask guarda la sesión en una cookie firmada del cliente. Pero si necesitas persistencia mayor o almacenamiento en memoria/Redis, puedes usar la extensión Flask-Session.

Instalación y configuración

$ pip install Flask-Session

from flask_session import Session

app.config['SESSION_TYPE'] = 'filesystem'
Session(app)

Uso con Redis y otras opciones de almacenamiento

También puedes usar SESSION_TYPE = 'redis' para almacenar sesiones en un servidor Redis, ideal para apps distribuidas o de gran escala.

Buenas prácticas y seguridad

️ Evitar exposición de datos sensibles

Nunca guardes contraseñas, tokens o información privada directamente en la sesión. Usa identificadores anónimos o cifrados.

⏱️ Controlar la expiración de la sesión

Configura el tiempo de expiración con:

app.permanent_session_lifetime = timedelta(minutes=30)

Configurar cookies seguras (SESSION_COOKIE_SECURE)

Asegúrate de usar HTTPS y marcar las cookies como seguras:

app.config['SESSION_COOKIE_SECURE'] = True

Cómo agregar más de un elemento a la sesión en Flask mediante arrays

En Flask, la sesión es una forma de almacenar datos que se asocian con un usuario durante el uso de la aplicación, usualmente se relaciona el uso de la sesion con un usuario autnetiado, pero, el usuario tambien puede usar la sesión sin necesidad de estar autenticado. Por ejemplo, si un usuario inicia sesión en una aplicación web Flask, se puede crear una sesión para manejar los datos básicos de este usuario, como sería su nombre, email e indenrificador, entre otras preferencias.

Flask proporciona una forma fácil de trabajar con la sesión a través del objeto session, que es un objeto de Python que se almacena en cookies en el navegador del usuario. 

Para utilizar la sesión en Flask se pueden utilizar funciones como session.get() y session.pop() para leer y escribir datos en la sesión, respectivamente.

El uso de la sesión es muy sencillo en Flask y veremos cómo podemos guardar más que simplemente texto, números o similares:

session['age'] = 30
session['name'] = "Andres"

Antes que nada, recuerda que podemos importarlo internamente de Flask:

from flask import session

Y definimos un par de funciones, para agregar y remover elementos de un array, en este caso:

def addRoomSession(room):
    if 'rooms' not in session:
        session['rooms'] = []
    
    rooms = session['rooms']
    rooms.append(room)
    session['rooms'] = rooms
    print(session['rooms'])
def removeRoomSession(room):
    if 'rooms' not in session:
        return
    
    rooms = session['rooms']
    rooms.remove(room)
    session['rooms'] = rooms

La idea es notar que podemos guardar arrays dentro de la sesión:

rooms = session['rooms']  # obtenemos la sesion, la key que queremos modificar
rooms.append(room)        # agregamos nuestros elementos
session['rooms'] = rooms  # la establecemos nuevamente en la sesion

Este código forma parte de mi curso completo sobre Flask, en el cual vemos como trabajar con Flask Socket IO y las habitaciones o rooms.

Conclusión

La Session en Flask es una herramienta esencial para mantener datos del usuario entre peticiones, sin complicar el backend.
En mi experiencia, su combinación de simplicidad y seguridad la hace perfecta para gestionar login, carritos o cualquier flujo que requiera persistencia temporal.
Si tu proyecto crece, puedes ampliar su capacidad con Flask-Session y Redis, garantizando escalabilidad y control total de los datos.

❓ Preguntas frecuentes (FAQ)

¿Qué pasa si el servidor se reinicia?
Las sesiones en cookies se mantienen mientras no cambie la clave secreta; las de servidor pueden perderse si no usas almacenamiento persistente.

¿Puedo guardar objetos complejos?
Sí, pero deben ser serializables (JSON, por ejemplo).

¿Cómo elimino todos los datos de sesión?
Puedes usar session.clear() para limpiar por completo.

¿Flask Session es segura?
Sí, siempre que uses una clave secreta robusta y cookies seguras bajo HTTPS.

El siguiente paso, aprende a usar formularios en Flask.

Acepto recibir anuncios de interes sobre este Blog.

El uso de la sesión en cualquier sistema web se utiliza para almacenar información relacionada con un usuario en la misma se guardan datos como el del nombre, identificador, veremos como usar en Flask.

| 👤 Andrés Cruz

🇺🇸 In english