microdot.session — סשנים מבוססי עוגיות חתומות¶
מאגר מפתח/ערך לכל משתמש הנתמך על ידי jwt בעוגיית session יחידה. ה-JWT חתום בסוד הידוע רק ליישום, כך שהלקוח יכול לקרוא את העוגייה אך אינו יכול לשבש את המטען מבלי שהשרת יזהה זאת.
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
מפתח סימטרי המשמש לחתימת ה-JWT של הסשן. נדרש לפני שכל סשן נקרא או נכתב – גישה ל-
get()ללא אחד מרימהValueError. אחסן אותו מחוץ לבקרת המקור; במצלמה זהו בדרך כלל קובץ במערכת הקבצים FAT.- cookie_options
Dict של אפשרויות המועברות ל-
microdot.Response.set_cookie()בכל פעם שעוגיית הסשן נכתבת. ברירות המחדל קובעותpath='/'ו-http_only=True. הוסףsecure=Trueעבור פריסות HTTPS-בלבד.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
מצרף ל-app אם הבנייה נדחתה. secret_key / cookie_options עוקפים את ערכי הבנאי אם ניתנים.
- get(request) SessionDict¶
מחזיר את מילון הסשן עבור request. המילון מפוענח בעצלתיים מעוגיית ה-
sessionבגישה הראשונה ונשמר במטמון ב-request.g._sessionלשארית הבקשה. עוגיות משובשות / שאינן ניתנות לחתימה מחזירות dict ריק.
- encode(payload: dict, secret_key=None) str¶
מקודד את payload כ-JWT עם סוד הסשן. משמש פנימית; נחשף עבור קוראים הרוצים לטבוע אסימונים תואמים.
- decode(session: str, secret_key=None) dict¶
מאמת ומפענח ערך סשן ממחרוזת-JWT. מחזיר
{}בכל כשל אימות.
- secret_key: bytes | str | None¶
סוד החתימה המשמש לחתום ולאמת את ה-JWT של הסשן. ניתן להגדרה לאחר הבנייה.
Noneעד שמוגדר; קריאת הסשן ללא אחד מרימהValueError.
- cookie_options: dict¶
ה-dict של האפשרויות המוחלות על עוגיית הסשן כשהיא נכתבת, המועברות ל-
microdot.Response.set_cookie(). ברירות המחדל קובעותpath='/'ו-http_only=Trueלאחר ש-initialize()פועלת.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
האובייקט דמוי-ה-dict המוחזר על ידי
Session.get(). יורש מ-dict, כך שכל השינויים הסטנדרטיים עובדים; שתי מתודות נוספות מבצעות commit לשינויים בחזרה אל התגובה.- save()¶
כותב את הסשן (שיתכן ושונה) בחזרה אל התגובה כעוגיית
sessionחדשה. ללא קריאה זו, עריכות במקום אובדות כשהבקשה מסתיימת.
- delete()¶
מסיר את הסשן על ידי פליטת כותרת מחיקת-עוגייה על התגובה.
מעטרים ברמת המודול¶
- microdot.session.with_session(f)¶
מעטר המעביר את מילון הסשן למטפל הנתיב כארגומנט שני:
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']}
המעטר אינו שומר אוטומטית – קרא ל-
SessionDict.save()כאשר הסשן שונה.
מטען הסשן עצמו הוא dict רגיל של Python המסודר (serialized) כ-JSON בתוך ה-JWT. שמור אותו קטן: כל בקשה וכל תגובה נושאות את העוגייה המלאה, ו-JWTs אינם מתוכננים לאחסון אובייקטים גדולים. עבור מצב לכל משתמש הגדול ממאות בתים בודדות, אחסן את הנתונים בצד השרת לפי מזהה סשן קטן.