Cookie   쿠키

(2023-12-06)

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)}`

웹 기능 요소
   1. 링크   2. 애플릿   3. 앵커   4. 쿠키   5. 태그   6. 위젯/가젯   7. 툴팁  
웹 프로토콜 (HTTP)
   1. HTTP   2. HTTP 메세지   3. HTTP 메소드   4. HTTP 상태코드   5. 프록시   6. 프록시 보안   7. HTTP 캐시   8. 쿠키   9. HTTPS   10. HTTP 표준  


"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"