microdot.session — ondertekende cookie-sessies¶
Een sleutel/waarde-opslag per gebruiker, ondersteund door een jwt in één enkele session-cookie. De JWT wordt ondertekend met een geheim dat alleen de applicatie kent, zodat de client de cookie kan lezen maar de payload niet kan manipuleren zonder dat de server dit detecteert.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
De
microdot.Microdot-instantie om op te installeren. Optioneel; roep laterinitialize()aan indien niet opgegeven.- secret_key
Symmetrische sleutel gebruikt om de sessie-JWT te ondertekenen. Vereist voordat een sessie wordt gelezen of geschreven –
get()aanroepen zonder sleutel gooitValueErrorop. Bewaar deze buiten versiebeheer; op een camera is dit doorgaans een bestand op het FAT-bestandssysteem.- cookie_options
Dict van opties die worden doorgegeven aan
microdot.Response.set_cookie()telkens wanneer de sessiecookie wordt geschreven. Standaard wordtpath='/'enhttp_only=Trueingesteld. Voegsecure=Truetoe voor uitsluitend-HTTPS-implementaties.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Koppel aan app als de constructie was uitgesteld. secret_key / cookie_options overschrijven de constructorwaarden indien opgegeven.
- get(request) SessionDict¶
Geef het sessiewoordenboek voor request terug. Het woordenboek wordt lui gedecodeerd uit de
session-cookie bij de eerste toegang en gecachet oprequest.g._sessionvoor de rest van het request. Gemanipuleerde / niet-ondertekenbare cookies geven een lege dict terug.
- encode(payload: dict, secret_key=None) str¶
Codeer payload als een JWT met het geheim van de sessie. Wordt intern gebruikt; blootgesteld voor aanroepers die compatibele tokens willen aanmaken.
- decode(session: str, secret_key=None) dict¶
Verifieer en decodeer een JWT-string-sessiewaarde. Geeft
{}terug bij elke verificatiefout.
- secret_key: bytes | str | None¶
Het ondertekeningsgeheim gebruikt om de sessie-JWT te ondertekenen en te verifiëren. Instelbaar na constructie.
Nonetotdat ingesteld; de sessie lezen zonder dit geheim gooitValueErrorop.
- cookie_options: dict¶
De dict van opties die op de sessiecookie wordt toegepast wanneer deze wordt geschreven, doorgegeven aan
microdot.Response.set_cookie(). Standaard wordtpath='/'enhttp_only=Trueingesteld nadatinitialize()draait.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Het dict-achtige object dat door
Session.get()wordt teruggegeven. Subklasse vandict, dus alle standaardmutaties werken; twee extra methoden committen de wijzigingen terug in de respons.- save()¶
Schrijf de (mogelijk gemuteerde) sessie terug in de respons als een nieuwe
session-cookie. Zonder deze aanroep gaan in-place bewerkingen verloren wanneer het request eindigt.
- delete()¶
Verwijder de sessie door een cookie-verwijderingsheader op de respons uit te sturen.
Decorators op moduleniveau¶
- microdot.session.with_session(f)¶
Decorator die het sessiewoordenboek als tweede argument aan de route-handler doorgeeft:
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']}
De decorator slaat niet automatisch op – roep
SessionDict.save()aan wanneer de sessie is gewijzigd.
De sessie-payload zelf is een gewone Python-dict die als JSON binnen de JWT wordt geserialiseerd. Houd deze klein: elk request en elke respons draagt de volledige cookie, en JWT’s zijn niet ontworpen voor het opslaan van grote objecten. Sla voor gebruikersstatus groter dan een paar honderd bytes de gegevens server-side op met een kleine sessie-identificatie als sleutel.