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 จาก
sessioncookie ในการเข้าถึงครั้งแรกและแคชไว้ใน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 เป็น
sessioncookie ใหม่ หากไม่มีการเรียกนี้ การแก้ไข 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 ขนาดเล็ก