Flask Session Interface API

SessionInterface es la abstracción subyacente de Session, que te permite reemplazar el almacenamiento de cookies predeterminado de Flask por almacenamiento externo como Redis, bases de datos, etc.

Para una implementación personalizada solo necesitas heredarSessionInterfacee implementar dos métodos.


Clase base abstracta SessionInterface

Atributos/Métodos Descripción
null_session_class Clase utilizada cuando Session no está disponible. Por defecto es NullSession
pickle_based bool, indica si Session se serializa con pickle. Por defecto es False
open_session(app, request) Lee los datos de Session de la solicitud. Devuelve una instancia de SessionMixin o None
save_session(app, session, response) Guarda los datos de Session en la respuesta
make_null_session(app) Crea una Session vacía (se llama automáticamente cuando open_session devuelve None)
is_null_session(obj) Determina si es una instancia de NullSession

Métodos de opciones de Cookie

Los siguientes métodos se utilizan para obtener los atributos de la Cookie de Session y pueden ser sobrescritos:

Método Descripción
get_cookie_name(app) Obtiene el nombre de la Cookie. Por defecto lee la configuración SESSION_COOKIE_NAME
get_cookie_domain(app) Obtiene el Domain de la Cookie. Por defecto lee la configuración SESSION_COOKIE_DOMAIN
get_cookie_path(app) Obtiene el Path de la Cookie. Por defecto lee SESSION_COOKIE_PATH o APPLICATION_ROOT
get_cookie_httponly(app) Obtiene el indicador HttpOnly. Por defecto lee SESSION_COOKIE_HTTPONLY
get_cookie_secure(app) Obtiene el indicador Secure. Por defecto lee SESSION_COOKIE_SECURE
get_cookie_samesite(app) Obtiene el valor SameSite. Por defecto lee SESSION_COOKIE_SAMESITE
get_cookie_partitioned(app) Obtiene el indicador Partitioned. Por defecto lee SESSION_COOKIE_PARTITIONED (v3.1+)
get_expiration_time(app, session) Obtiene el tiempo de expiración de Session. Para Session permanente devuelve now + lifetime
should_set_cookie(app, session) Determina si es necesario configurar la Cookie. Devuelve True cuando Session ha sido modificada o es permanente + SESSION_REFRESH_EACH_REQUEST

Implementaciones integradas

Clase Descripción
SecureCookieSessionInterface Implementación predeterminada. Usa cookies firmadas con itsdangerous para almacenar los datos de Session. key_derivation="hmac", digest_method=sha1
SecureCookieSession Clase Session basada en CallbackDict. Detecta modificaciones en las claves de nivel superior y establece automáticamente modified=True
NullSession Session de marcador de posición utilizada cuando no se ha configurado SECRET_KEY. La lectura es normal, pero al modificarla se produce un error
SessionMixin Mixin de la clase Session. Proporciona los atributos permanent, new, modified, accessed

Reemplazar la implementación predeterminada de Session

Ejemplo

from flask import Flask
from flask.sessions import SessionInterface, SessionMixin

# Clase Session personalizada
class MySession(dict, SessionMixin):
    pass

# Interfaz Session personalizada
class MySessionInterface(SessionInterface):
    def open_session(self, app, request):
        # Cargar Session desde la solicitud
        user_id = request.headers.get("X-User-ID")
        if user_id:
            return MySession(user_id=user_id)
        return MySession()

    def save_session(self, app, session, response):
        # Guardar Session en la respuesta
        if "user_id" in session:
            response.headers["X-Session-ID"] = session["user_id"]

app = Flask(__name__)
# Reemplazar la implementación predeterminada de Session
app.session_interface = MySessionInterface()
Otras extensiones