Skip to content
On this page

2020-11-20

Title
2020-11-20
Category
2020
Tags
Aliases
2020-11-20
Created
3 years ago
Updated
last year

쿠키와 인증(Auth)

쿠키란?

📌 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억할 수 있는 기술

  • 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각

  • 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송

  • 쿠키는 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용 (사용자의로그인 상태를 유지)

목적

  • 세션 관리

    서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등등의 정보를 관리함

  • 개인화

    사용자 선호, 테마 등의 세팅

  • 트래킹

    사용자의 행동을 기록하고 분석하는 용도

쿠키 생성하기

HTTP 응답 헤더의 Set-Cookie key에 값을 설정할 수 있다.

javascript
function(req, res) {
  res.writeHead(200, {
    'Set-Cookie': ['yummy_cookie=choco', 'tasty_cookie=strawberry'],
  })
}
function(req, res) {
  res.writeHead(200, {
    'Set-Cookie': ['yummy_cookie=choco', 'tasty_cookie=strawberry'],
  })
}

쿠키 가져오기

javascript
function(req, res) {
  console.log(res.headers.cookie); // ['yummy_cookie=choco', 'tasty_cookie=strawberry']
}
function(req, res) {
  console.log(res.headers.cookie); // ['yummy_cookie=choco', 'tasty_cookie=strawberry']
}

Session vs Persistent

  • 브라우저가 종료되는 경우 삭제 됨.

session storage는 브라우저 탭이 종료되면 삭제되는 반면, 쿠키는 브라우저 탭 간에도 공유되어 브라우저가 완전히 종료되어야 삭제된다. 참조

  • 브라우저를 종료해도 사용자의 하드디스크에 저장.

  • 삭제 시기 : Max-Age 속성에 명시된 기간 이후에, 또는 Expires 속성에 명시된날짜에 삭제, 또는 직접 삭제

Secure & HttpOnly

Secure

javascript
'Set-Cookie': ['hello_secure_cookie=hello-secure; Secure'],
'Set-Cookie': ['hello_secure_cookie=hello-secure; Secure'],

Secure 쿠키는 HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 전송된다. 하지만 이플래그가 실질적인 보안을 제공하는 것은 아니다.

HttpOnly

javascript
'Set-Cookie': ['hello_http_only=hello-http; HttpOnly'],
'Set-Cookie': ['hello_http_only=hello-http; HttpOnly'],

HttpOnly 쿠키는 JavaScript의 document.cookie API로 접근할 수 없다. 서버에게 전송되기만 한다.

Path & Domain

path

path=/subpath 이런 식으로 쿠키를 전송하기 위하여 요청되는 URL 내에 반드시 존재해야 하는 URL 경로를 지정할 수 있다.

domain

javascript
'Set-Cookie': ['hello_domain=hello-domain; Domain=o2.org'],
'Set-Cookie': ['hello_domain=hello-domain; Domain=o2.org'],

이렇게 지정하면 subdomain.o2.org 등등의 모든 서브 도메인에 대해서도 쿠키가 저장되게 된다.

Released under the MIT License.