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łajinitialize()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łaszaValueError. 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 topath='/'ihttp_only=True. Dodajsecure=Truedla 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
sessionprzy pierwszym dostępie i buforowany wrequest.g._sessionna 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.
Nonedo czasu ustawienia; odczyt sesji bez niego zgłaszaValueError.
- cookie_options: dict¶
Słownik opcji stosowanych do ciasteczka sesji przy jego zapisie, przekazywanych do
microdot.Response.set_cookie(). Domyślne ustawienia topath='/'ihttp_only=Truepo uruchomieniuinitialize().
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Obiekt przypominający słownik zwracany przez
Session.get(). Podklasadict, 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.