microdot.session — 서명된 쿠키 세션¶
단일 session 쿠키 내의 jwt로 뒷받침되는 사용자별 키/값 저장소입니다. JWT는 애플리케이션만 아는 비밀(secret)로 서명되므로, 클라이언트는 쿠키를 읽을 수는 있지만 서버가 감지하지 않고는 페이로드를 변조할 수 없습니다.
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
세션 쿠키가 작성될 때마다
microdot.Response.set_cookie()로 전달되는 옵션의 dict입니다. 기본값은path='/'와http_only=True를 설정합니다. HTTPS 전용 배포에는secure=True를 추가하십시오.
- 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로 인코딩합니다. 내부적으로 사용되며, 호환되는 토큰을 생성하려는 호출자를 위해 노출됩니다.
- secret_key: bytes | str | None¶
세션 JWT를 서명하고 검증하는 데 사용되는 서명 비밀입니다. 생성 후 설정할 수 있습니다. 설정되기 전까지는
None이며, 이것 없이 세션을 읽으면ValueError가 발생합니다.
- cookie_options: dict¶
세션 쿠키가 작성될 때 적용되는 옵션의 dict로,
microdot.Response.set_cookie()로 전달됩니다.initialize()가 실행된 후 기본값은path='/'와http_only=True를 설정합니다.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
Session.get()이 반환하는 dict류 객체입니다.dict를 서브클래스하므로 모든 표준 변경이 동작하며, 두 개의 추가 메서드가 변경 사항을 응답에 다시 커밋합니다.- 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()를 호출하십시오.
세션 페이로드 자체는 JWT 내부에 JSON으로 직렬화된 일반 Python dict입니다. 작게 유지하십시오: 모든 요청과 모든 응답이 전체 쿠키를 운반하며, JWT는 큰 객체를 저장하도록 설계되지 않았습니다. 수백 바이트보다 큰 사용자별 상태의 경우, 작은 세션 식별자로 키를 매긴 서버 측 데이터로 저장하십시오.