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로 인코딩합니다. 내부적으로 사용되며, 호환되는 토큰을 생성하려는 호출자를 위해 노출됩니다.

decode(session: str, secret_key=None) dict

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는 큰 객체를 저장하도록 설계되지 않았습니다. 수백 바이트보다 큰 사용자별 상태의 경우, 작은 세션 식별자로 키를 매긴 서버 측 데이터로 저장하십시오.