microdot.session — sesiuni de cookie semnate¶
Un depozit cheie/valoare per utilizator susținut de un jwt într-un singur cookie session. JWT-ul este semnat cu un secret cunoscut doar de aplicație, astfel încât clientul poate citi cookie-ul, dar nu poate altera sarcina utilă fără ca serverul să detecteze acest lucru.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
Instanța
microdot.Microdotpe care se instalează. Opțional; apelațiinitialize()ulterior dacă nu este dată.- secret_key
Cheie simetrică folosită pentru a semna JWT-ul sesiunii. Necesară înainte ca orice sesiune să fie citită sau scrisă – accesarea
get()fără una ridicăValueError. Stocați-o în afara controlului sursei; pe o cameră aceasta este de obicei un fișier pe sistemul de fișiere FAT.- cookie_options
Dict de opțiuni transmise lui
microdot.Response.set_cookie()ori de câte ori cookie-ul de sesiune este scris. Valorile implicite seteazăpath='/'șihttp_only=True. Adăugațisecure=Truepentru implementări doar HTTPS.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Atașează la app dacă construcția a fost amânată. secret_key / cookie_options înlocuiesc valorile constructorului dacă sunt date.
- get(request) SessionDict¶
Returnează dicționarul de sesiune pentru request. Dicționarul este decodificat leneș din cookie-ul
sessionla prima accesare și stocat în cache perequest.g._sessionpentru restul cererii. Cookie-urile alterate / nesemnabile returnează un dict gol.
- encode(payload: dict, secret_key=None) str¶
Codifică payload ca un JWT cu secretul sesiunii. Folosit intern; expus pentru apelanții care doresc să genereze token-uri compatibile.
- decode(session: str, secret_key=None) dict¶
Verifică și decodifică o valoare de sesiune de tip șir JWT. Returnează
{}la orice eșec de verificare.
- secret_key: bytes | str | None¶
Secretul de semnare folosit pentru a semna și verifica JWT-ul sesiunii. Setabil după construcție.
Nonepână la setare; citirea sesiunii fără el ridicăValueError.
- cookie_options: dict¶
Dict-ul de opțiuni aplicate cookie-ului de sesiune când acesta este scris, transmis lui
microdot.Response.set_cookie(). Valorile implicite seteazăpath='/'șihttp_only=Truedupă ce ruleazăinitialize().
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Obiectul de tip dict returnat de
Session.get(). Subclaseazădict, deci toate mutațiile standard funcționează; două metode suplimentare comit modificările înapoi în răspuns.- save()¶
Scrie sesiunea (eventual mutată) înapoi în răspuns sub forma unui nou cookie
session. Fără acest apel, editările pe loc sunt pierdute când cererea se încheie.
- delete()¶
Elimină sesiunea prin emiterea unui antet de ștergere a cookie-ului în răspuns.
Decoratoare la nivel de modul¶
- microdot.session.with_session(f)¶
Decorator care transmite dicționarul de sesiune gestionarului de rută ca al doilea 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']}
Decoratorul nu salvează automat – apelați
SessionDict.save()când sesiunea a fost modificată.
Sarcina utilă a sesiunii în sine este un dict Python obișnuit serializat ca JSON în interiorul JWT-ului. Păstrați-o mică: fiecare cerere și fiecare răspuns transportă cookie-ul complet, iar JWT-urile nu sunt concepute pentru stocarea obiectelor mari. Pentru stare per utilizator mai mare de câteva sute de octeți, stocați datele pe partea de server, indexate după un mic identificator de sesiune.