microdot.session --- phiên signed cookie

Một kho khóa/giá trị theo người dùng được hỗ trợ bởi jwt trong một cookie session duy nhất. JWT được ký bằng một bí mật chỉ ứng dụng biết, vì vậy client có thể đọc cookie nhưng không thể giả mạo payload mà không bị máy chủ phát hiện.

class Session

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

Phiên bản microdot.Microdot để cài đặt vào. Tùy chọn; gọi initialize() sau nếu không được cung cấp.

secret_key

Khóa đối xứng dùng để ký session JWT. Bắt buộc trước khi bất kỳ phiên nào được đọc hoặc ghi -- truy cập get() mà không có khóa này sẽ ném ValueError. Lưu trữ nó ngoài kiểm soát nguồn; trên camera đây thường là một file trên filesystem FAT.

cookie_options

Dict các tùy chọn được chuyển tiếp đến microdot.Response.set_cookie() bất cứ khi nào cookie phiên được ghi. Mặc định đặt path='/'http_only=True. Thêm secure=True cho các triển khai chỉ HTTPS.

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

Đính kèm vào app nếu việc khởi tạo bị trì hoãn. secret_key / cookie_options ghi đè các giá trị constructor nếu được cung cấp.

get(request) SessionDict

Trả về từ điển phiên cho request. Từ điển được giải mã lười biếng từ cookie session khi truy cập lần đầu và được cache trên request.g._session cho phần còn lại của request. Các cookie bị giả mạo / không thể ký trả về dict rỗng.

encode(payload: dict, secret_key=None) str

Mã hóa payload dưới dạng JWT với bí mật của phiên. Được sử dụng nội bộ; được hiển thị cho các caller muốn tạo các token tương thích.

decode(session: str, secret_key=None) dict

Xác minh và giải mã một giá trị phiên JWT-string. Trả về {} khi xác minh thất bại.

secret_key: bytes | str | None

Bí mật ký được sử dụng để ký và xác minh session JWT. Có thể đặt sau khi xây dựng. None cho đến khi được đặt; đọc phiên mà không có nó sẽ ném ValueError.

cookie_options: dict

Dict các tùy chọn được áp dụng cho cookie phiên khi nó được ghi, được chuyển tiếp đến microdot.Response.set_cookie(). Mặc định đặt path='/'http_only=True sau khi initialize() chạy.

class SessionDict

class microdot.session.SessionDict(request, session_dict)

Đối tượng tương tự dict được trả về bởi Session.get(). Kế thừa dict, vì vậy tất cả các thay đổi chuẩn đều hoạt động; hai phương thức bổ sung cam kết các thay đổi trở lại vào phản hồi.

save()

Ghi phiên (có thể đã bị thay đổi) trở lại vào phản hồi dưới dạng một cookie session mới. Nếu không có lệnh gọi này, các chỉnh sửa tại chỗ bị mất khi request kết thúc.

delete()

Xóa phiên bằng cách phát ra một header xóa cookie trên phản hồi.

Decorator cấp module

microdot.session.with_session(f)

Decorator truyền từ điển phiên vào trình xử lý route như đối số thứ hai:

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 không tự động lưu -- gọi SessionDict.save() khi phiên được sửa đổi.

Payload phiên bản thân là một Python dict thông thường được serialize dưới dạng JSON bên trong JWT. Giữ nó nhỏ: mỗi request và mỗi phản hồi đều mang cookie đầy đủ, và JWT không được thiết kế để lưu trữ các đối tượng lớn. Đối với trạng thái theo người dùng lớn hơn vài trăm byte, hãy lưu trữ dữ liệu phía máy chủ được khóa bởi một định danh phiên nhỏ.