microdot.session — podpisane sesje w ciasteczkach

Magazyn klucz/wartość dla danego użytkownika oparty na jwt w pojedynczym ciasteczku session. JWT jest podpisany sekretem znanym wyłącznie aplikacji, więc klient może odczytać ciasteczko, ale nie może manipulować ładunkiem bez wykrycia tego przez serwer.

class Session

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

Instancja microdot.Microdot, na której ma zostać zainstalowany. Opcjonalna; wywołaj initialize() później, jeśli nie została podana.

secret_key

Klucz symetryczny używany do podpisywania JWT sesji. Wymagany, zanim jakakolwiek sesja zostanie odczytana lub zapisana – dostęp do get() bez niego zgłasza ValueError. Przechowuj go poza kontrolą wersji; na kamerze jest to zwykle plik w systemie plików FAT.

cookie_options

Słownik opcji przekazywanych do microdot.Response.set_cookie() przy każdym zapisie ciasteczka sesji. Domyślne ustawienia to path='/' i http_only=True. Dodaj secure=True dla wdrożeń tylko z HTTPS.

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

Dołącza do app, jeśli konstrukcja została odroczona. secret_key / cookie_options nadpisują wartości z konstruktora, jeśli zostały podane.

get(request) SessionDict

Zwraca słownik sesji dla request. Słownik jest leniwie dekodowany z ciasteczka session przy pierwszym dostępie i buforowany w request.g._session na resztę żądania. Zmanipulowane / niemożliwe do zweryfikowania podpisem ciasteczka zwracają pusty słownik.

encode(payload: dict, secret_key=None) str

Koduje payload jako JWT z sekretem sesji. Używane wewnętrznie; udostępnione dla wywołujących, którzy chcą tworzyć kompatybilne tokeny.

decode(session: str, secret_key=None) dict

Weryfikuje i dekoduje wartość sesji będącą ciągiem JWT. Zwraca {} przy dowolnym niepowodzeniu weryfikacji.

secret_key: bytes | str | None

Sekret podpisujący używany do podpisywania i weryfikowania JWT sesji. Możliwy do ustawienia po konstrukcji. None do czasu ustawienia; odczyt sesji bez niego zgłasza ValueError.

cookie_options: dict

Słownik opcji stosowanych do ciasteczka sesji przy jego zapisie, przekazywanych do microdot.Response.set_cookie(). Domyślne ustawienia to path='/' i http_only=True po uruchomieniu initialize().

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Obiekt przypominający słownik zwracany przez Session.get(). Podklasa dict, więc wszystkie standardowe modyfikacje działają; dwie dodatkowe metody zatwierdzają zmiany z powrotem do odpowiedzi.

save()

Zapisuje (ewentualnie zmodyfikowaną) sesję z powrotem do odpowiedzi jako nowe ciasteczko session. Bez tego wywołania edycje w miejscu są tracone po zakończeniu żądania.

delete()

Usuwa sesję, emitując nagłówek usuwania ciasteczka w odpowiedzi.

Dekoratory na poziomie modułu

microdot.session.with_session(f)

Dekorator przekazujący słownik sesji do procedury obsługi trasy jako 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 nie zapisuje automatycznie – wywołaj SessionDict.save(), gdy sesja została zmodyfikowana.

Sam ładunek sesji to zwykły słownik Python serializowany jako JSON wewnątrz JWT. Utrzymuj go małym: każde żądanie i każda odpowiedź niosą pełne ciasteczko, a JWT nie są przeznaczone do przechowywania dużych obiektów. Dla stanu danego użytkownika większego niż kilkaset bajtów przechowuj dane po stronie serwera, kluczując je małym identyfikatorem sesji.