microdot.session — signerade cookie-sessioner¶
Ett nyckel/värde-lager per användare som backas av en jwt i en enda session-cookie. JWT:n signeras med en hemlighet som endast applikationen känner till, så klienten kan läsa cookien men kan inte manipulera nyttolasten utan att servern upptäcker det.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
Den
microdot.Microdot-instans som ska installeras på. Valfritt; anropainitialize()senare om den inte anges.- secret_key
Symmetrisk nyckel som används för att signera sessions-JWT:n. Krävs innan någon session läses eller skrivs – åtkomst till
get()utan en sådan kastarValueError. Lagra den utanför källkontrollen; på en kamera är detta vanligtvis en fil på FAT-filsystemet.- cookie_options
Dict med alternativ som vidarebefordras till
microdot.Response.set_cookie()när sessions-cookien skrivs. Standardvärden sätterpath='/'ochhttp_only=True. Lägg tillsecure=Trueför distributioner som endast använder HTTPS.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Anslut till app om konstruktionen sköts upp. secret_key / cookie_options åsidosätter konstruktorvärden om de anges.
- get(request) SessionDict¶
Returnera sessionsordboken för request. Ordboken avkodas lättladdat från
session-cookien vid första åtkomsten och cachas pårequest.g._sessionunder resten av begäran. Manipulerade / osignerbara cookies returnerar en tom dict.
- encode(payload: dict, secret_key=None) str¶
Koda payload som en JWT med sessionens hemlighet. Används internt; exponerad för anropare som vill skapa kompatibla tokens.
- decode(session: str, secret_key=None) dict¶
Verifiera och avkoda ett sessionsvärde i form av en JWT-sträng. Returnerar
{}vid varje verifieringsfel.
- secret_key: bytes | str | None¶
Den signeringshemlighet som används för att signera och verifiera sessions-JWT:n. Kan ställas in efter konstruktionen.
Nonetills den ställts in; att läsa sessionen utan den kastarValueError.
- cookie_options: dict¶
Den dict med alternativ som tillämpas på sessions-cookien när den skrivs, vidarebefordrad till
microdot.Response.set_cookie(). Standardvärden sätterpath='/'ochhttp_only=Trueefter attinitialize()har körts.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Det dict-liknande objekt som returneras av
Session.get(). Ärver fråndict, så alla standardmutationer fungerar; två extra metoder skriver tillbaka ändringarna i svaret.- save()¶
Skriv tillbaka den (eventuellt muterade) sessionen in i svaret som en ny
session-cookie. Utan detta anrop går redigeringar på plats förlorade när begäran avslutas.
- delete()¶
Ta bort sessionen genom att sända ut ett cookie-raderingshuvud i svaret.
Dekoratorer på modulnivå¶
- microdot.session.with_session(f)¶
Dekorator som skickar sessionsordboken till rutthanteraren som ett andra 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']}
Dekoratorn sparar inte automatiskt – anropa
SessionDict.save()när sessionen har modifierats.
Själva sessionsnyttolasten är en vanlig Python-dict serialiserad som JSON inuti JWT:n. Håll den liten: varje begäran och varje svar bär den fullständiga cookien, och JWT:er är inte utformade för att lagra stora objekt. För användartillstånd större än några hundra byte, lagra data på serversidan med en liten sessionsidentifierare som nyckel.