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 אינם מתוכננים לאחסון אובייקטים גדולים. עבור מצב לכל משתמש הגדול ממאות בתים בודדות, אחסן את הנתונים בצד השרת לפי מזהה סשן קטן.