C.W.K.
Stream
Lesson 02 of 06 · published

Sessions vs Tokens — 그 쿠키에 실제로 뭐가 들었는지

~15 min · sessions, jwt, cookies

Level 0Greenhorn
0 XP0/53 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

"로그인 됐다" 가 쿠키에 뭐가 들었느냐에 따라 와일드하게 다른 의미가 돼. 세 패턴이 지배적이고 각각 다른 실패 모드 가져.

패턴쿠키 안 내용서버 저장Revocation
Session 쿠키랜덤 opaque 토큰 (예: 32 hex 문자)DB 에 token → user_id, expires_at, ip 매핑row 삭제 — 즉시
JWT (signed, stateless)self-describing JSON + signature없음만료까지 진짜 revoke 못 함; denylist 필요
Bearer 토큰 (API key)Authorization 헤더의 랜덤 문자열DB row + scoperow 삭제

솔로 앱한테 session 이 이기는 이유

이 퀘스트의 PIN layer 는 SQLite 테이블의 session 쿠키 써. 이유:

  • 즉시 revocation. "Revoke All" 이 SQL DELETE 한 줄. JWT 는 stateless 의 핵심을 망가뜨리는 denylist 필요.
  • IP 에 묶여. 각 session row 가 발급된 IP 저장; mismatched IP = invalid. 공짜 anti-replay.
  • admin 에서 보임. active session 리스트, 발급 시간, 발급 위치, 만료 시간 다 봐.
  • 작아. 외부 의존성 없음; SQLite 는 Python 에 내장.

중요한 쿠키 플래그

플래그효과기본 입장
HttpOnlyJavaScript 가 쿠키 못 읽음항상 ON — XSS 절도 차단
SecureHTTPS 로만 전송프로덕션 ON; localhost 만 OFF
SameSite=Strictcross-site 요청에 안 보냄솔로 앱은 ON — cross-site flow 필요 없음
Max-Age수명 (초)제한 — 예: 30일, 절대 "infinite" 아님

Code

FastAPI / Starlette 에서 강화된 session 쿠키 설정·python
response.set_cookie(
    key="session",
    value=token,
    max_age=30 * 24 * 3600,    # 30일
    httponly=True,            # JS 가 못 읽음
    secure=True,              # HTTPS 만 — localhost 개발 때만 OFF
    samesite="strict",        # cross-site 전송 없음
    path="/",
)

External links

Exercise

네 앱 중 하나에서 DevTools → Application → Cookies 열고 session 쿠키 검사. 체크: HttpOnly 됐어? Secure 됐어? SameSite 값? Max-Age 제한? 빠진 플래그마다 서버 사이드에서 고치고 reload. 대부분 브라우저가 쿠키 inspector 에 안전하지 않은 쿠키 visually flag 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.