microdot.session — sessions par cookie signé

Un magasin clé/valeur par utilisateur reposant sur un jwt dans un unique cookie session. Le JWT est signé avec un secret connu uniquement de l’application, de sorte que le client peut lire le cookie mais ne peut pas altérer la charge utile sans que le serveur ne le détecte.

class Session

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

L’instance microdot.Microdot sur laquelle s’installer. Optionnel ; appelez initialize() plus tard si elle n’est pas fournie.

secret_key

Clé symétrique utilisée pour signer le JWT de session. Requise avant toute lecture ou écriture de session – accéder à get() sans elle lève ValueError. Conservez-la hors du contrôle de source ; sur une caméra, il s’agit généralement d’un fichier sur le système de fichiers FAT.

cookie_options

Dict d’options transmises à microdot.Response.set_cookie() chaque fois que le cookie de session est écrit. Les valeurs par défaut définissent path='/' et http_only=True. Ajoutez secure=True pour les déploiements HTTPS uniquement.

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

Attache à app si la construction a été différée. secret_key / cookie_options remplacent les valeurs du constructeur s’ils sont fournis.

get(request) SessionDict

Renvoie le dictionnaire de session pour request. Le dictionnaire est décodé paresseusement à partir du cookie session lors du premier accès et mis en cache sur request.g._session pour le reste de la requête. Les cookies altérés / non signables renvoient un dict vide.

encode(payload: dict, secret_key=None) str

Encode payload sous forme de JWT avec le secret de la session. Utilisé en interne ; exposé pour les appelants qui souhaitent émettre des jetons compatibles.

decode(session: str, secret_key=None) dict

Vérifie et décode une valeur de session sous forme de chaîne JWT. Renvoie {} en cas d’échec de vérification.

secret_key: bytes | str | None

Le secret de signature utilisé pour signer et vérifier le JWT de session. Modifiable après construction. None jusqu’à ce qu’il soit défini ; lire la session sans lui lève ValueError.

cookie_options: dict

Le dict d’options appliquées au cookie de session lorsqu’il est écrit, transmises à microdot.Response.set_cookie(). Les valeurs par défaut définissent path='/' et http_only=True après l’exécution de initialize().

class SessionDict

class microdot.session.SessionDict(request, session_dict)

L’objet de type dict renvoyé par Session.get(). Sous-classe dict, donc toutes les mutations standard fonctionnent ; deux méthodes supplémentaires répercutent les modifications dans la réponse.

save()

Réécrit la session (éventuellement modifiée) dans la réponse sous la forme d’un nouveau cookie session. Sans cet appel, les modifications sur place sont perdues à la fin de la requête.

delete()

Supprime la session en émettant un en-tête de suppression de cookie sur la réponse.

Décorateurs au niveau du module

microdot.session.with_session(f)

Décorateur qui transmet le dictionnaire de session au gestionnaire de route comme second argument

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']}

Le décorateur n’enregistre pas automatiquement – appelez SessionDict.save() lorsque la session a été modifiée.

La charge utile de session elle-même est un dict Python ordinaire sérialisé en JSON à l’intérieur du JWT. Gardez-la petite : chaque requête et chaque réponse transporte le cookie complet, et les JWT ne sont pas conçus pour stocker de gros objets. Pour un état par utilisateur dépassant quelques centaines d’octets, stockez les données côté serveur indexées par un petit identifiant de session.