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.Microdoten la que instalar. Opcional; llama ainitialize()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 lanzaValueError. 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 establecenpath='/'yhttp_only=True. Añadesecure=Truepara 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
sessionen el primer acceso y se almacena en caché enrequest.g._sessiondurante 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.
Nonehasta que se establece; leer la sesión sin él lanzaValueError.
- 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 establecenpath='/'yhttp_only=Truedespués de que se ejecutainitialize().
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
El objeto similar a dict devuelto por
Session.get(). Subclaseadict, 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.