microdot.session — sesiones de cookies firmadas

Un almacén clave/valor por usuario respaldado por un jwt en una única cookie session. El JWT se firma con un secreto conocido solo por la aplicación, de modo que el cliente puede leer la cookie pero no puede manipular la carga útil sin que el servidor lo detecte.

class Session

class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)
app

La instancia microdot.Microdot en la que instalar. Opcional; llama a initialize() más tarde si no se proporciona.

secret_key

Clave simétrica usada para firmar el JWT de la sesión. Requerida antes de leer o escribir cualquier sesión – acceder a get() sin una lanza ValueError. Guárdala fuera del control de versiones; en una cámara esto suele ser un archivo en el sistema de archivos FAT.

cookie_options

Dict de opciones reenviadas a microdot.Response.set_cookie() siempre que se escribe la cookie de sesión. Los valores por defecto establecen path='/' y http_only=True. Añade secure=True para despliegues solo HTTPS.

initialize(app: Microdot, secret_key=None, cookie_options=None)

Adjunta a app si la construcción se difirió. secret_key / cookie_options anulan los valores del constructor si se proporcionan.

get(request) SessionDict

Devuelve el diccionario de sesión para request. El diccionario se decodifica de forma perezosa desde la cookie session en el primer acceso y se almacena en caché en request.g._session durante el resto de la solicitud. Las cookies manipuladas / no firmables devuelven un dict vacío.

encode(payload: dict, secret_key=None) str

Codifica payload como un JWT con el secreto de la sesión. Usado internamente; expuesto para los llamadores que quieran acuñar tokens compatibles.

decode(session: str, secret_key=None) dict

Verifica y decodifica un valor de sesión de tipo cadena JWT. Devuelve {} ante cualquier fallo de verificación.

secret_key: bytes | str | None

El secreto de firma usado para firmar y verificar el JWT de la sesión. Configurable después de la construcción. None hasta que se establece; leer la sesión sin él lanza ValueError.

cookie_options: dict

El dict de opciones aplicadas a la cookie de sesión cuando se escribe, reenviadas a microdot.Response.set_cookie(). Los valores por defecto establecen path='/' y http_only=True después de que se ejecuta initialize().

class SessionDict

class microdot.session.SessionDict(request, session_dict)

El objeto similar a dict devuelto por Session.get(). Subclasea dict, por lo que funcionan todas las mutaciones estándar; dos métodos adicionales confirman los cambios de vuelta en la respuesta.

save()

Escribe la sesión (posiblemente mutada) de vuelta en la respuesta como una nueva cookie session. Sin esta llamada, las ediciones in situ se pierden cuando termina la solicitud.

delete()

Elimina la sesión emitiendo una cabecera de eliminación de cookie en la respuesta.

Decoradores a nivel de módulo

microdot.session.with_session(f)

Decorador que pasa el diccionario de sesión al manejador de ruta como segundo argumento:

from microdot import Microdot
from microdot.session import Session, with_session

app = Microdot()
Session(app, secret_key=load_secret())

@app.get('/counter')
@with_session
async def counter(request, session):
    session['n'] = session.get('n', 0) + 1
    session.save()
    return {'n': session['n']}

El decorador no guarda automáticamente – llama a SessionDict.save() cuando la sesión se haya modificado.

La carga útil de la sesión es en sí misma un dict de Python normal serializado como JSON dentro del JWT. Mantenla pequeña: cada solicitud y cada respuesta llevan la cookie completa, y los JWT no están diseñados para almacenar objetos grandes. Para el estado por usuario mayor de unos pocos cientos de bytes, almacena los datos en el lado del servidor indexados por un pequeño identificador de sesión.