microdot.session — potpisane sesije putem kolačića

Spremište ključ/vrijednost po korisniku poduprto jwt-om u jednom session kolačiću. JWT je potpisan tajnom poznatom samo aplikaciji, pa klijent može pročitati kolačić, ali ne može mijenjati sadržaj a da poslužitelj to ne otkrije.

class Session

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

Instanca microdot.Microdot na koju se instalira. Opcionalno; pozovite initialize() kasnije ako nije zadano.

secret_key

Simetrični ključ koji se koristi za potpisivanje JWT-a sesije. Potreban prije čitanja ili zapisivanja bilo koje sesije – pristup get() bez njega podiže ValueError. Pohranite ga izvan kontrole izvornog koda; na kameri je to obično datoteka na FAT datotečnom sustavu.

cookie_options

Rječnik opcija proslijeđenih microdot.Response.set_cookie() kad god se zapisuje kolačić sesije. Zadano postavlja path='/' i http_only=True. Dodajte secure=True za implementacije isključivo putem HTTPS-a.

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

Pridružuje se app ako je izgradnja bila odgođena. secret_key / cookie_options nadjačavaju vrijednosti konstruktora ako su zadane.

get(request) SessionDict

Vraća rječnik sesije za request. Rječnik se lijeno dekodira iz session kolačića pri prvom pristupu i kešira na request.g._session za ostatak zahtjeva. Izmijenjeni / nepotpisivi kolačići vraćaju prazan rječnik.

encode(payload: dict, secret_key=None) str

Kodira payload kao JWT s tajnom sesije. Koristi se interno; izloženo za pozivatelje koji žele kovati kompatibilne tokene.

decode(session: str, secret_key=None) dict

Provjerava i dekodira vrijednost sesije kao JWT niz. Vraća {} pri bilo kakvom neuspjehu provjere.

secret_key: bytes | str | None

Tajna za potpisivanje koja se koristi za potpisivanje i provjeru JWT-a sesije. Može se postaviti nakon izgradnje. None dok se ne postavi; čitanje sesije bez nje podiže ValueError.

cookie_options: dict

Rječnik opcija primijenjenih na kolačić sesije pri zapisivanju, proslijeđen microdot.Response.set_cookie(). Zadano postavlja path='/' i http_only=True nakon što se izvrši initialize().

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Objekt nalik rječniku koji vraća Session.get(). Podklasa je dict, pa rade sve standardne izmjene; dvije dodatne metode upisuju promjene natrag u odgovor.

save()

Zapisuje (eventualno izmijenjenu) sesiju natrag u odgovor kao novi session kolačić. Bez ovog poziva, izmjene na mjestu gube se kada zahtjev završi.

delete()

Uklanja sesiju emitiranjem zaglavlja za brisanje kolačića u odgovoru.

Dekoratori na razini modula

microdot.session.with_session(f)

Dekorator koji prosljeđuje rječnik sesije rukovatelju rute kao drugi 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']}

Dekorator ne sprema automatski – pozovite SessionDict.save() kada je sesija izmijenjena.

Sam sadržaj sesije je običan Python rječnik serijaliziran kao JSON unutar JWT-a. Držite ga malim: svaki zahtjev i svaki odgovor nosi cijeli kolačić, a JWT-ovi nisu osmišljeni za pohranu velikih objekata. Za stanje po korisniku veće od nekoliko stotina bajtova, pohranite podatke na poslužitelju ključene malim identifikatorom sesije.