본문 바로가기

Development/TIL

내가 만든 Cookie

쿠키(cookie)란?

클라이언트가 서버로부터 set-cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보낸다.

- 데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약하다.

- 쿠키는 문자열 형식으로 존재하며 쿠키 간에는 세미콜론으로 구분된다.

 

 

쿠키를 만들어보자

서버가 클라이언트의 요청(request)을 수신할 때, 서버는 응답(response)과 함께 set-cookie라는 헤더를 함께 전송할 수 있다. 그 후 쿠키는 해당 서버에 의해 만들어진 응답과 함께 cookie HTTP 헤더 안에 포함되어 전달 받는다.

 

 

set-cookie를 이용해 쿠키 할당

app.get("/set-cookie", (req, res) => {
  let expire = new Date();
  expire.setMinutes(expire.getMinutes() + 60); // 만료 시간을 60분으로 설정합니다.

  res.writeHead(200, {
    'Set-Cookie': `name=sparta; Expires=${expire.toGMTString()}; HttpOnly; Path=/`,
  });
  return res.status(200).end();
});
  1. HTTP 응답 헤더에 set-cookie 헤더를 추가하기 위해 res.writeHead() 메서드 호출
  2. set-cookie 헤더 값은 name=sparta 쿠키를 정의
  3. expire.toGMTString() 메서드를 사용하여 쿠키의 만료 시간을 설정한다. 현재 시간으로부터 60분 뒤 만료.
  4. HttpOnly 옵션은 쿠키를 자바스크립트에서 접근하지 못하도록 한다.
  5. Path=/ 옵션은 쿠키를 모든 경로에서 사용할 수 있도록 한다.

 

 

res.cookie()를 이용해 쿠키 할당

app.get("/set-cookie", (req, res) => {
  let expires = new Date();
  expires.setMinutes(expires.getMinutes() + 60); // 만료 시간을 60분으로 설정합니다.

  res.cookie('name', 'sparta', {
    expires: expires
  });
  return res.status(200).end();
});

res.cookie() 함수를 사용한 방법이다. 훨씬 간결하고 깔끔하게 쿠키를 구울 수 있는 것 같다.

res.cookie() 함수의 첫번째 인자로 쿠키 이름, 두번째 인자로 쿠키 값, 세번째 인자로 쿠키 옵션을 설정할 수 있다.

위의 예시에서는 expires(만료 시간) 옵션만 설정하였다.

설정 가능한 옵션들은 다음과 같다.

  • domain : 쿠키를 전송할 도메인 설정
  • expires : 쿠키 만료일 설정. 설정하지 않으면 브라우저를 닫을 때 쿠키 삭제
  • httpOnly : 브라우저에서 쿠키에 접근할 수 없도록 설정
  • maxAge : 쿠키가 만료되기까지 남은 시간을 밀리초로 설정
  • path : 쿠키를 전송할 경로를 설정
  • sameSite : 쿠키를 전송할 도메인이나 경로가 다른 사이트에서 쿠키를 전송할 수 없도록 설정
  • secure : HTTPS 프로토콜을 사용할 때만 쿠키를 전송하도록 설정

 

 

res.writeHead() 와 res.cookie() 의 차이

res.writeHead()는 Node.js의 기본 HTTP 모듈에서 제공하는 메서드이고

res.cookie()는 Express.js Node.js 웹 프레임 워크에서 제공하는 메서드이다.

보통 res.cookie() 메서드를 많이 이용한다고 한다.

이유는

  1. 코드 가독성
  2. 쿠키 검증
    => res.cookie 메서드를 사용하면 쿠키 값을 따로 검증할 필요가 없다.
    하지만 res.writeHead 메서드는 직접 쿠키 값을 만들어야 하므로 유효한지 검증이 필요.
  3. res.cookie 메서드는 위에서 설명한 바와 같이 다양한 옵션을 제공하여 정교한 쿠키 제작이 가능하다.

'Development > TIL' 카테고리의 다른 글

Sequelize  (0) 2023.04.25
JsonWebToken  (0) 2023.04.23
try catch를 이용한 예외 처리  (0) 2023.04.20
schema.virtual  (0) 2023.04.20
this에 대하여  (0) 2023.04.18