[WEB] Cookie

ktmihs·2022년 1월 24일
0

WEB

목록 보기
3/4
post-thumbnail

🍪 도입 과정

http는 stateless 프로토콜이기 때문에 request와 response의 상태를 관리하지 않는다. 즉, 과거 상태를 근거로 현재 요청을 처리할 수 없다.

따라서, 인증이 필요한 웹 페이지에서 상태를 관리하기 위해서는 인증했을 때의 상태를 기억할 필요가 있다.

👉 이러한 문제를 해결하기 위해 쿠키라는 시스템 도입




🍪 Cookie

request와 response에 쿠키 정보를 추가해서 유저 식별과 상태 관리에 사용하기 위한 시스템이다.
쿠키는 request와 response의 헤더에 담아 보낼 수 있다.

response 헤더에 위치
상태 관리 개시를 위한 쿠키 정보

NAME=VALUE (필수)

쿠키에 부여된 이름과 값.
쿠키는 해당 이름으로 된 값을 가질 수 있다.

// example
// res.cookie(name, value, option);
res.cookie('accessToken', createToken(user.userId, '7d'), {httpOnly: true});

Expires=DATE

쿠키의 유효 기한.
브라우저는 설정된 유효 기한까지 쿠키를 유지하다가, 해당 기간에 도달하면 쿠키를 자동으로 삭제한다.
만약 현재보다 과거로 지정하면 쿠키는 삭제된다.

//example
// 반드시 GMT 포맷으로 설정해야 함
expires=Sun, 30 Jan 2022 22:00:00 GMT

maxAge

쿠키가 유지될 기간.
현재부터 설정하고자 하는 만료 일시까지의 시간을 초로 환산해 지정한다.
만약 0 또는 음수 값을 설정하게 되면 쿠키는 삭제된다.
Expires는 maxAge로 대체할 수 있다.

// example
maxAge: 1000 * 60 * 60 * 24 * 7

Path=PATH

쿠키 적용 대상이 되는 서버 상의 디렉토리.
이 경로나 이 경로의 하위 경로에 있는 페이지만 쿠키에 접근할 수 있다.
지정하지 않은 경우, document와 같은 디렉토리가 된다. 일반적으로 특별한 경우가 아니라면, 루트로 설정해 웹사이트의 모든 페이지에서 쿠키에 접근할 수 있도록 한다.

// example
path=/admin 으로 설정한 경우, 

/admin ⭕
/admin/something ⭕
/home ❌
/otherpage ❌ 

Domain=도메인 명

쿠키 적용 대상이 되는 도메인 명.
지정하지 않은 경우는 쿠키를 생성한 서버의 도메인 명으로 적용된다.

일반적으로는 안정성을 위해 설정한 도메인이 아닐 경우 뿐만 아니라, 서브 도메인에서도 쿠키 정보를 얻을 수 없다.
하지만, 직접적으로 도메인을 명시해준다면 서브 도메인에서도 접근이 가능해진다.

// example
site.com에서 쿠키를 설정했을 경우,
  
other.com ❌
forum.site.com ❌
// 처럼 서브 도메인에서도 쿠키 정보를 얻을 수 없음
// example
Set-Cookie: name=value;domain=site.com

other.com ❌
forum.site.com ⭕
// 명시해준다면 서브 도메인에서도 쿠키 정보를 얻을 수 있음

Secure

HTTPS로 통신하고 있는 경우에만 쿠키를 송신.
해당 옵션이 설정되어 있지 않다면 HTTP와 HTTPS를 확인하지 않지만, 해당 옵션이 설정되어 있다면, 설정한 쿠키는 HTTP에서는 접근할 수 없다.

// example
Set-Cookie: name=value; secure

HttpOnly

쿠키를 Javascript에서 액세스하지 못하도록 제한.
크로스 사이트 스크립팅으로부터 쿠키의 도청을 막는 것을 목적으로 한다.

// example
Set-Cookie: name=value; HttpOnly 

request 헤더에 위치
서버에서 수신한 쿠키 정보

Cookie 헤더 필드는 클라이언트가 HTTP의 상태 관리 지원을 원할 때, 서버로부터 수신한 쿠키를 이후의 request에 포함해서 전달한다.

// example
Cookie: status=enable

REF

그림으로 배우는 Http & Network basic
javascript.info - cookie

profile
💛

0개의 댓글