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.Microdot pe care se instalează. Opțional; apelați initialize() 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='/' și http_only=True. Adăugați secure=True pentru 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 session la prima accesare și stocat în cache pe request.g._session pentru 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. None pâ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='/' și http_only=True după 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.