microdot.session — allekirjoitetut evästeistunnot

Käyttäjäkohtainen avain/arvo-varasto, joka perustuu jwt-tokeniin yhdessä session-evästeessä. JWT allekirjoitetaan vain sovelluksen tuntemalla salaisuudella, joten asiakas voi lukea evästeen mutta ei voi peukaloida hyötykuormaa ilman, että palvelin havaitsee sen.

class Session

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

microdot.Microdot-instanssi, johon asennetaan. Valinnainen; kutsu initialize() myöhemmin, jos sitä ei anneta.

secret_key

Symmetrinen avain, jota käytetään istunnon JWT:n allekirjoittamiseen. Vaaditaan ennen kuin mitään istuntoa luetaan tai kirjoitetaan – get()-metodin käyttäminen ilman sitä nostaa ValueError-poikkeuksen. Säilytä se versionhallinnan ulkopuolella; kamerassa tämä on tyypillisesti tiedosto FAT-tiedostojärjestelmässä.

cookie_options

Dict asetuksista, jotka välitetään metodille microdot.Response.set_cookie() aina kun istuntoeväste kirjoitetaan. Oletukset asettavat path='/' ja http_only=True. Lisää secure=True vain HTTPS:ää käyttäviin käyttöönottoihin.

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

Liittää app-sovellukseen, jos muodostus lykättiin. secret_key / cookie_options ohittavat konstruktorin arvot, jos annetaan.

get(request) SessionDict

Palauttaa istuntosanakirjan pyynnölle request. Sanakirja dekoodataan laiskasti session-evästeestä ensimmäisellä käytöllä ja välimuistitetaan kohteeseen request.g._session pyynnön loppuajaksi. Peukaloidut / allekirjoittamattomat evästeet palauttavat tyhjän dict-objektin.

encode(payload: dict, secret_key=None) str

Koodaa payload-hyötykuorman JWT:ksi istunnon salaisuudella. Käytetään sisäisesti; paljastettu kutsujille, jotka haluavat luoda yhteensopivia tokeneja.

decode(session: str, secret_key=None) dict

Vahvistaa ja dekoodaa JWT-merkkijonomuotoisen istuntoarvon. Palauttaa {} minkä tahansa vahvistusvirheen tapauksessa.

secret_key: bytes | str | None

Allekirjoitussalaisuus, jota käytetään istunnon JWT:n allekirjoittamiseen ja vahvistamiseen. Asetettavissa muodostuksen jälkeen. None, kunnes asetetaan; istunnon lukeminen ilman sitä nostaa ValueError-poikkeuksen.

cookie_options: dict

Dict asetuksista, jotka kohdistetaan istuntoevästeeseen sitä kirjoitettaessa, välitetään metodille microdot.Response.set_cookie(). Oletukset asettavat path='/' ja http_only=True initialize()-metodin suorituksen jälkeen.

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Session.get()-metodin palauttama dict-tyyppinen objekti. Aliluokkaa dict, joten kaikki tavanomaiset muutokset toimivat; kaksi lisämetodia tallentaa muutokset takaisin vastaukseen.

save()

Kirjoittaa (mahdollisesti muokatun) istunnon takaisin vastaukseen uutena session-evästeenä. Ilman tätä kutsua paikan päällä tehdyt muokkaukset menetetään, kun pyyntö päättyy.

delete()

Poistaa istunnon lähettämällä evästeenpoisto-otsikon vastauksessa.

Moduulitason koristelijat

microdot.session.with_session(f)

Koristelija, joka välittää istuntosanakirjan reittikäsittelijälle toisena argumenttina:

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']}

Koristelija ei tallenna automaattisesti – kutsu SessionDict.save(), kun istuntoa on muokattu.

Istunnon hyötykuorma itsessään on tavallinen Python-dict, joka serialisoidaan JSON-muodossa JWT:n sisällä. Pidä se pienenä: jokainen pyyntö ja jokainen vastaus kuljettaa koko evästeen, eikä JWT:itä ole suunniteltu suurten objektien tallentamiseen. Käyttäjäkohtaiselle tilalle, joka on suurempi kuin muutama sata tavua, tallenna data palvelimen puolelle pienellä istuntotunnisteella avaintettuna.