microdot.session --- session แบบ signed cookie

ที่เก็บ key/value ต่อผู้ใช้ที่อยู่บน jwt ใน session cookie เดียว JWT ถูกลงนามด้วย secret ที่รู้เฉพาะแอปพลิเคชัน ดังนั้น client สามารถอ่าน cookie ได้แต่ไม่สามารถแก้ไข payload โดยที่เซิร์ฟเวอร์ไม่ตรวจพบได้

class Session

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

อินสแตนซ์ microdot.Microdot ที่จะติดตั้ง ไม่บังคับ; เรียก initialize() ภายหลังหากไม่ได้กำหนด

secret_key

Symmetric key ที่ใช้ลงนาม session JWT จำเป็นก่อนที่จะอ่านหรือเขียน session ใด ๆ -- การเข้าถึง get() โดยไม่มีจะเรียก ValueError เก็บไว้นอก source control; บนกล้องมักเป็นไฟล์บน FAT filesystem

cookie_options

Dict ของตัวเลือกที่ส่งต่อไปยัง microdot.Response.set_cookie() เมื่อเขียน session cookie ค่าเริ่มต้นกำหนด path='/' และ http_only=True เพิ่ม secure=True สำหรับการ deploy ที่ใช้ HTTPS เท่านั้น

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

แนบกับ app หากการสร้างถูกเลื่อนออกไป secret_key / cookie_options แทนที่ค่าของ constructor หากกำหนด

get(request) SessionDict

คืน session dictionary สำหรับ request dictionary ถูกถอดรหัสแบบ lazy จาก session cookie ในการเข้าถึงครั้งแรกและแคชไว้ใน request.g._session สำหรับส่วนที่เหลือของ request cookie ที่ถูกแก้ไขหรือไม่สามารถลงนามได้จะคืน dict ว่างเปล่า

encode(payload: dict, secret_key=None) str

เข้ารหัส payload เป็น JWT ด้วย secret ของ session ใช้ภายใน; เปิดเผยสำหรับผู้เรียกที่ต้องการสร้าง token ที่เข้ากันได้

decode(session: str, secret_key=None) dict

ตรวจสอบและถอดรหัส JWT-string session value คืน {} เมื่อการตรวจสอบล้มเหลวไม่ว่าในกรณีใด

secret_key: bytes | str | None

Signing secret ที่ใช้ลงนามและตรวจสอบ session JWT ตั้งค่าได้หลังการสร้าง None จนกว่าจะตั้ง; การอ่าน session โดยไม่มีจะเรียก ValueError

cookie_options: dict

Dict ของตัวเลือกที่ใช้กับ session cookie เมื่อเขียน ส่งต่อไปยัง microdot.Response.set_cookie() ค่าเริ่มต้นกำหนด path='/' และ http_only=True หลังจาก initialize() ทำงาน

class SessionDict

class microdot.session.SessionDict(request, session_dict)

object คล้าย dict ที่คืนโดย Session.get() เป็น subclass ของ dict ดังนั้น mutation มาตรฐานทั้งหมดใช้งานได้; สองเมธอดพิเศษ commit การเปลี่ยนแปลงกลับเข้าไปใน response

save()

เขียน session (ที่อาจ mutate แล้ว) กลับเข้าไปใน response เป็น session cookie ใหม่ หากไม่มีการเรียกนี้ การแก้ไข in-place จะหายไปเมื่อ request สิ้นสุด

delete()

ลบ session โดยส่ง cookie-deletion header ใน response

Module-level decorator

microdot.session.with_session(f)

Decorator ที่ส่ง session dictionary ไปยัง route handler เป็นอาร์กิวเมนต์ที่สอง:

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

Decorator ไม่ auto-save -- เรียก SessionDict.save() เมื่อ session ถูกแก้ไข

Session payload เองเป็น Python dict ธรรมดาที่ serialize เป็น JSON ภายใน JWT เก็บให้เล็กไว้: ทุก request และทุก response บรรทุก cookie แบบเต็ม และ JWT ไม่ได้ออกแบบมาสำหรับการเก็บ object ขนาดใหญ่ สำหรับ state ต่อผู้ใช้ที่ใหญ่กว่าหลายร้อยไบต์ ให้เก็บข้อมูลไว้ฝั่งเซิร์ฟเวอร์โดยใช้ key เป็น session identifier ขนาดเล็ก