1. 쿠키 (Cookie)
ㅇ 인터넷 웹 상에서, 서버측에서 관리하려는 상태정보를,
- 서버가 아닌 클라이언트측(인터넷 웹브라우저)에 저장하며,
- 서버측에서 필요시 마다 이를 지속성있게 활용하고자 할 때 사용
※ 결국, 쿠키는 웹 서버에 의해 통제되는 개념임
2. 쿠키의 사용이유
ㅇ 웹의 기능구현상 주요 단점
- 어떤 요청에 대해 단지 하나의 응답만이 있을 뿐 ☞ HTTP 참조
. 즉, 상태유지를 위한 변수를 서버측에 할 수 없으며,
. 이에따라 서버측은 사용자에 대한 지속적인 상태감시 및 상태참조가 어려움
※ 따라서, 이를 해결하기 위한 수단으로, 사용자용 프로그램인 웹브라우저에다가,
- 서버측이 원하는 상태 값들을 저장할 수 있게하도록 한 것이 바로 쿠키임
3. 쿠키의 형식, 저장, 송출, 수명, 제한
ㅇ 쿠키 형식
- HTTP 헤더 항목
. Set-Cookie: 서버측에서 상태 정보를 웹브라우저에게 저장
. Cookie: 웹브라우저가 서버에게 당시 저장된 상태 정보를 제출
- 쿠키 내용은, `Set-Cookie: name1=value1; name2=value2; ...` 형식을 갖춤
ㅇ 쿠키 저장
- 웹 서버는, HTTP 헤더 내, `Set-Cookie:`란에 셋팅할 쿠키 관련 정보를 실려 보냄
- 웹 브라우저는, 쿠키를 도메인 서버 이름으로 정렬된, `쿠키 디렉토리`에 저장
ㅇ 쿠키 검색 및 송출
- 웹브라우저가 서버에 웹페이지 요청을 보낼 때,
- 웹브라우저가 보유하는 쿠키 디렉토리에서 해당 서버의 쿠키 정보가 있으면,
- 해당 쿠키를 HTTP 요청 메세지(HTTP 헤더 내 `Cookie:`)에 무조건 포함시켜 송출함
ㅇ 쿠키 수명
- 기본적으로, 웹 브라우저의 종료시까지 임
. 웹브라우저 종료하면 쿠키 정보가 삭제됨
ㅇ 쿠키 제한
- 내용 보기의 제한
. 쿠키 내용은, 웹브라우저에서 동작하는 자바스크립트 등에 의해,
. 현재 접속된 사이트 것 만 읽힐 수 있음 (document.cookie)
. 타 사이트 쿠기는 보이지 않음
- 용량 제한 : 각 사이트별 최대 4 킬로 바이트 전달/저장 용량 제한
4. HTTP 헤더 항목 내 쿠키 관련 속성들
ㅇ 쿠키 수명 결정
- Expires (특정 시각까지 수명) : 웹브라우저가 실행되는 컴퓨터 시계를 기준으로 결정됨
- Max-Age (초 단위 최대 수명)
ㅇ Domain : 대상 서버 도메인
ㅇ Path : 서버 내 경로
ㅇ Secure : HTTPS 일 경우에 만, 서버측에게 쿠키 전송 가능
ㅇ HttpOnly : 자바스크립트가 쿠키 내용 볼 수 없게 함
5. (언어별 쿠키 사용)
ㅇ [PHP] ☞ PHP 쿠키, PHP 세션 참조
ㅇ [자바스크립트]
- 접근 형식 : document.cookie
. 쿠키 보기 例) console.log(document.cookie); // 현재 저장된 쿠키 모두를 콘솔에 보여줌
. 쿠키 설정 例) document.cookie = "count=3;name=test"; // "이름1=값1;이름2=값2" 쌍
* 통상, 인코딩 형식에 일관성을 주기 위하여, 다음과 같이 인코딩하여 지정 함
. let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`