microdot.session --- sesi cookie yang ditandatangani¶
Penyimpanan kunci/nilai per-pengguna yang didukung oleh jwt dalam satu cookie session. JWT ditandatangani dengan kunci rahasia yang hanya diketahui oleh aplikasi, sehingga klien dapat membaca cookie tetapi tidak dapat mengubah payload tanpa server mendeteksinya.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
Instans
microdot.Microdotyang akan diinstal. Opsional; panggilinitialize()nanti jika tidak diberikan.- secret_key
Kunci simetris yang digunakan untuk menandatangani JWT sesi. Diperlukan sebelum sesi apa pun dibaca atau ditulis -- mengakses
get()tanpa kunci ini akan memicuValueError. Simpan di luar kontrol sumber; pada kamera ini biasanya berupa file di filesystem FAT.- cookie_options
Dict opsi yang diteruskan ke
microdot.Response.set_cookie()setiap kali cookie sesi ditulis. Default menetapkanpath='/'danhttp_only=True. Tambahkansecure=Trueuntuk deployment hanya HTTPS.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Lampirkan ke app jika konstruksi ditunda. secret_key / cookie_options mengganti nilai konstruktor jika diberikan.
- get(request) SessionDict¶
Kembalikan kamus sesi untuk request. Kamus ini didekode secara lazy dari cookie
sessionpada akses pertama dan di-cache direquest.g._sessionuntuk sisa request. Cookie yang dimanipulasi / tidak dapat diverifikasi mengembalikan dict kosong.
- encode(payload: dict, secret_key=None) str¶
Encode payload sebagai JWT dengan rahasia sesi. Digunakan secara internal; diekspos untuk pemanggil yang ingin mencetak token yang kompatibel.
- decode(session: str, secret_key=None) dict¶
Verifikasi dan dekode nilai sesi string-JWT. Mengembalikan
{}pada kegagalan verifikasi apa pun.
- secret_key: bytes | str | None¶
Kunci penandatanganan yang digunakan untuk menandatangani dan memverifikasi JWT sesi. Dapat diset setelah konstruksi.
Nonesampai diset; membaca sesi tanpanya memicuValueError.
- cookie_options: dict¶
Dict opsi yang diterapkan pada cookie sesi saat ditulis, diteruskan ke
microdot.Response.set_cookie(). Default menetapkanpath='/'danhttp_only=Truesetelahinitialize()berjalan.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Objek seperti dict yang dikembalikan oleh
Session.get(). Subkelasdict, sehingga semua mutasi standar berfungsi; dua metode tambahan menyimpan perubahan kembali ke respons.- save()¶
Tulis sesi (yang mungkin sudah dimutasi) kembali ke respons sebagai cookie
sessionbaru. Tanpa panggilan ini, pengeditan di tempat akan hilang ketika request berakhir.
- delete()¶
Hapus sesi dengan mengeluarkan header penghapusan cookie pada respons.
Dekorator level modul¶
- microdot.session.with_session(f)¶
Dekorator yang meneruskan kamus sesi ke handler route sebagai argumen kedua:
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 tidak menyimpan secara otomatis -- panggil
SessionDict.save()ketika sesi dimodifikasi.
Payload sesi itu sendiri adalah dict Python biasa yang diserialisasi sebagai JSON di dalam JWT. Jaga agar tetap kecil: setiap request dan setiap respons membawa cookie penuh, dan JWT tidak dirancang untuk menyimpan objek besar. Untuk status per-pengguna yang lebih besar dari beberapa ratus byte, simpan data di sisi server yang dikunci dengan identifier sesi kecil.