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.