microdot.session — podepsané cookie relace

Úložiště klíč/hodnota pro jednotlivé uživatele založené na jwt v jediné cookie session. JWT je podepsán tajným klíčem známým pouze aplikaci, takže klient může cookie číst, ale nemůže manipulovat s payloadem, aniž by to server zjistil.

class Session

class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)
app

Instance microdot.Microdot, na kterou se má nainstalovat. Volitelné; pokud není zadána, zavolejte později initialize().

secret_key

Symetrický klíč použitý k podepsání JWT relace. Vyžadován dříve, než se relace přečte nebo zapíše – přístup k get() bez něj vyvolá ValueError. Uchovávejte jej mimo správu zdrojového kódu; na kameře je to obvykle soubor na FAT souborovém systému.

cookie_options

Dict voleb předávaných microdot.Response.set_cookie() při každém zápisu cookie relace. Výchozí hodnoty nastaví path='/' a http_only=True. Pro nasazení pouze přes HTTPS přidejte secure=True.

initialize(app: Microdot, secret_key=None, cookie_options=None)

Připojí se k app, pokud byla konstrukce odložena. secret_key / cookie_options přepíší hodnoty z konstruktoru, pokud jsou zadány.

get(request) SessionDict

Vrátí slovník relace pro request. Slovník se líně dekóduje z cookie session při prvním přístupu a uloží se do mezipaměti na request.g._session po zbytek požadavku. Zmanipulované / nepodepsatelné cookie vrátí prázdný dict.

encode(payload: dict, secret_key=None) str

Zakóduje payload jako JWT s tajným klíčem relace. Používá se interně; zpřístupněno pro volající, kteří chtějí vytvářet kompatibilní tokeny.

decode(session: str, secret_key=None) dict

Ověří a dekóduje hodnotu relace jako řetězec JWT. Vrací {} při jakémkoli selhání ověření.

secret_key: bytes | str | None

Tajný klíč pro podepisování použitý k podpisu a ověření JWT relace. Nastavitelný po konstrukci. None, dokud není nastaven; čtení relace bez něj vyvolá ValueError.

cookie_options: dict

Dict voleb aplikovaných na cookie relace při jejím zápisu, předávaný microdot.Response.set_cookie(). Výchozí hodnoty nastaví path='/' a http_only=True po spuštění initialize().

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Objekt podobný dict vracený Session.get(). Podtřída dict, takže fungují všechny standardní mutace; dvě další metody zapíší změny zpět do odpovědi.

save()

Zapíše (případně zmutovanou) relaci zpět do odpovědi jako novou cookie session. Bez tohoto volání se úpravy na místě po skončení požadavku ztratí.

delete()

Odstraní relaci vygenerováním hlavičky pro smazání cookie v odpovědi.

Dekorátory na úrovni modulu

microdot.session.with_session(f)

Dekorátor, který předá slovník relace obslužné rutině routy jako druhý 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']}

Dekorátor neukládá automaticky – po úpravě relace zavolejte SessionDict.save().

Samotný payload relace je běžný slovník Pythonu serializovaný jako JSON uvnitř JWT. Udržujte jej malý: každý požadavek i každá odpověď nese celou cookie a JWT nejsou navrženy pro ukládání velkých objektů. Pro stav jednotlivého uživatele větší než několik set bajtů ukládejte data na straně serveru pod malým identifikátorem relace.