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; anropa initialize() 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 kastar ValueError. 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ätter path='/' och http_only=True. Lägg till secure=True fö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._session under 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. None tills den ställts in; att läsa sessionen utan den kastar ValueError.

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ätter path='/' och http_only=True efter att initialize() har körts.

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Det dict-liknande objekt som returneras av Session.get(). Ärver från dict, 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.