•
쿠키는 클라이언트의 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
◦
서버에는 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 공격 방지
•
요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송