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.Microdot yang akan diinstal. Opsional; panggil initialize() 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 memicu ValueError. 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 menetapkan path='/' dan http_only=True. Tambahkan secure=True untuk 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 session pada akses pertama dan di-cache di request.g._session untuk 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. None sampai diset; membaca sesi tanpanya memicu ValueError.

cookie_options: dict

Dict opsi yang diterapkan pada cookie sesi saat ditulis, diteruskan ke microdot.Response.set_cookie(). Default menetapkan path='/' dan http_only=True setelah initialize() berjalan.

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Objek seperti dict yang dikembalikan oleh Session.get(). Subkelas dict, 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 session baru. 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.