Cookie-Session
1 Cookie
HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송합니다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용합니다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있습니다. 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜주기 때문입니다.
과거엔 클라이언트 측에 정보를 저장할 때 쿠키를 주로 사용하곤 했습니다. 쿠키를 사용하는 게 데이터를 클라이언트 측에 저장할 수 있는 유일한 방법이었을 때는 이 방법이 타당했지만, 지금은 modern storage APIs를 사용해 정보를 저장하는 걸 권장합니다. 모든 요청마다 쿠키가 함께 전송되기 때문에, (특히 mobile data connections에서) 성능이 떨어지는 원인이 될 수 있습니다. 정보를 클라이언트 측에 저장하려면 Modern APIs의 종류인 웹 스토리지 API (
localStorage
와sessionStorage
) 와 IndexedDB를 사용하면 됩니다.
- 쿠키 정보는 항상 서버에 전송되기 떄문에 네트워크 트래픽이 추가적으로 발생
- 최소한의 정보만 사용한다. 예) 세션ID, 인증 토큰
- 보안에 민감한 데이터는 저장하면 안된다
- 주민번호, 신용카드 번호 등
1.1 쿠키의 용도
- 쿠키는 주로 세 가지 목적을 위해 사용됩니다
- 세션 관리(Session management)
- 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리
- 개인화(Personalization)
- 사용자 선호, 테마 등의 세팅
- 트래킹(Tracking)
- 사용자 행동을 기록하고 분석하는 용도
1.2 Set-Cookie & Cookie 헤더
1.2.1 Set-Cookie
- Set-Cookie HTTP 응답 헤더는 서버로부터 사용자 에이전트로 전송됩니다.
- 간단한 쿠키는 다음과 같이 설정될 수 있습니다
Set-Cookie: <cookie-name>=<cookie-value>
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
쿠키의 생명주기
Set-Cookie: id=a3fWa; Expires=Thu, 31 Oct 2021 07:28:00 GMT;
(만료일 지정 만료일 지나면 쿠키 삭제)- Set-Cookie: max-age=3600(3600초)
- 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
- 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
Domain
- Domain을 명시하면 클라이언트가 명시된 Domain에만 쿠키를 전송한다
- Domain 명시
- 명시한 문서 기준 도메인 + 서브 도메인 포함
- Ex)
domain=example.org
지정 ->example.org
,dev.example.org
- Domain 생략
- 현재 문서 기준 도메인만 적용
- Ex) example.org에서 Domain 생략하고 쿠키 생성 ->
example.org
Path
- Path을 명시하면 클라이언트가 명시된 Path에만 쿠키를 전송한다
- 일반적으로
path=/
로 지정 - 예시)
path=/home
->- /home, home/level1, home/level1/level2 -> 전부 가능
- /hello -> 불가능
Secure
- 쿠키는 http, https 구분 없이 전송
- Secure 적용하면 https인 경우만 전송
1.2.1 Cookie
- 브라우저는 서버로 전송되는 모든 요청에
Cookie
헤더를 사용하여 서버로 이전에 저장했던 모든 쿠키들을 포함시킨다
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry