HTTP 쿠키는 브라우저가 보관했다가 정해진 조건에 맞는 요청에 첨부하는 작은 데이터다. HTTP 요청 사이에 상태를 기억하기 위해 사용하며 로그인 세션 식별이 대표적인 용도다. 서버가 사용자를 확인하는 전체 인증 체계와 쿠키 자체는 구별해야 한다.
세션을 기억하는 흐름
로그인에 성공하면 서버는 세션 식별자가 담긴 쿠키를 설정할 수 있다. 이후 브라우저가 요청에 쿠키를 보내면 서버는 해당 세션이 유효한지 확인한다. 쿠키 값이 존재한다고 권한이 영구적으로 유효한 것은 아니다. 서버의 만료, 로그아웃이나 권한 변경 결과에 따라 같은 식별자가 거부될 수 있다.
주요 속성
| 속성 | 주요 역할 |
|---|---|
| Secure | 보안 연결을 통한 전송으로 제한 |
| HttpOnly | 문서 스크립트의 쿠키 접근 제한 |
| SameSite | 사이트 간 요청에서의 전송 조건 제어 |
| Max-Age 또는 Expires | 보존 기간 설정 |
Domain과 Path도 전송 범위를 결정하는 데 사용된다. 속성은 각기 다른 목적을 가지므로 하나를 켰다고 다른 보호까지 모두 제공되는 것은 아니다. 특히 HttpOnly는 쿠키 접근을 제한하지만 페이지에서 실행된 악성 코드의 모든 행동을 막지는 않는다. 관련 공식 설명.
위키 계정의 예
공개 문서는 누구나 읽되 편집 저장 요청에는 세션과 권한을 확인하는 구조를 만들 수 있다. 로그아웃에서는 서버 상태와 브라우저의 쿠키 제거를 함께 처리해야 한다. 별도 API 출처를 사용한다면 CORS 설정과 자격 증명 전송 조건도 맞아야 한다. 출처와 사이트 판정은 동일하지 않으므로 동일 출처 정책과 함께 정확한 범위를 살핀다.
저장과 전송의 비용
쿠키는 요청에 실릴 수 있으므로 큰 문서나 많은 사용자 설정을 담는 일반 저장소로 쓰기에 적합하지 않다. 작은 화면 설정은 Web Storage 같은 별도 수단을 검토할 수 있다. 쿠키가 추적에 사용될 수 있다는 점과 브라우저의 차단 정책도 고려한다. 저장 성공, 요청 전송, 서버 세션 유효성은 각각 다른 확인 단계다.
참고: 공식 개발 문서.