Search
Duplicate
🍪

Cookie

쿠키는 클라이언트의 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
서버에는 HTTP Response Header의 Set-Cookie 속성을 이용하여 클라이언트에게 쿠키를 제공한다.
이름, 값, 만료날짜, 경로 정보 등이 있다.
일반적으로 클라이언트의 상태 정보를 로컬에 저장했다가 서버 측에 요청할 때 참조한다.
쿠키는 서버측에서 만료날짜, 시간을 정하여 정해진 시간동안 데이터를 유지할 수 있다. 보통 로그인 상태 유지에 사용된다.

세션 쿠키와 지속 쿠키

일반적으로 쿠키는 세션 쿠키와 지속 쿠키 둘로 나뉜다.
만료날짜/시간을 지정하지 않으면 ‘메모리에 존재하는 동안’ 계속 유효하다고 판단하도록 세션 쿠키에 젖아되고 만료날짜/시간이 존재하는 경우, 프로세스가 종료되더라도 특정 일까지 유효하므로 지속 쿠키에 저장된다.
세션 쿠키는 브라우저 메모리에 저장되므로 브라우저가 종료되면 사라지게 된다.
⇒ 참고로 세션 쿠키의 값은 보안상 꽤나 안전한 브라우저의 메모리에 저장되기 때문에 보안에 유리하지만 파일로 저장되는 지속 쿠키의 경우 비교적 보안에 취약하다.
지속 쿠키는 파일로 저장되므로 브라우저가 종료되어도 쿠키는 남아있게 된다.
처리 과정
브라우저에서 웹페이지에 접속한다.
클라이언트가 응답을 받으면서 HTTP Response Headers에 Set-Cookie 속성을 사용하여 통해 해당 서버의 쿠키 값을 응답으로 제공한다.
ex) sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:0 GMT; path=/; domain=.google.com; Secure
클라이언트가 웹페이지를 요청한 서버에 재요청 시 받았던 쿠키 정보도 같이 HTTP Request Headers의 Cookie 속성에 담아서 요청한다.
서버는 클라이언트의 요청에서 쿠키 값을 참고하여 처리한다.
쿠키 사용 사례
자동로그인, 팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크, 쇼핑몰의 장바구니 등
서버측에서 상태를 유지하기 위해 불필요한 정보들을 처리해야하는 과정을 생략할 수 있도록 클라이언트 측에서 정보를 제공하고자 주로 사용하는 것 같다.
쿠키의 한계
클라이언트에 최대 300개 까지 쿠키를 저장할 수 있다.
서버 도메인 하나당 최대 20개의 쿠키를 저장할 수 있다.
하나의 쿠키 값은 최대 4KB까지 저장할 수 있다.

도메인 설정

도메인 속성 설정을 통해서 지정한 도메인으로 요청할 때만 쿠키값이 헤더에 포함되도록 할 수 있다.
보통은 명시한 문서 기준 도메인 + 서브 도메인 포함하여 전달된다.
domain=example..org를 지정해서 쿠키 생성
example.org는 물론 dev.example.org도 쿠키 접근
example.org에서 쿠키를 생성하고 domain 지정을 생략하는 경우
example.org에서만 쿠키 접근
dev.example.org는 쿠키 미접근
보안은 다음과 같은 속성값을 이용해서 설정할 수 있다.
Secure
쿠키는 http, https를 구분하지 않고 전송
Secure를 적용하면 https인 경우에만 전송
HttpOnly
XSS 공격 방지
자바스크립트에서 접근 불가(document.cookie)
HTTP 전송에만 사용
SameSite
XSRF 공격 방지
요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송