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.Microdotsur laquelle s’installer. Optionnel ; appelezinitialize()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èveValueError. 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éfinissentpath='/'ethttp_only=True. Ajoutezsecure=Truepour 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
sessionlors du premier accès et mis en cache surrequest.g._sessionpour 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.
Nonejusqu’à ce qu’il soit défini ; lire la session sans lui lèveValueError.
- 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éfinissentpath='/'ethttp_only=Trueaprès l’exécution deinitialize().
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
L’objet de type dict renvoyé par
Session.get(). Sous-classedict, 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.