쿠키와 세션

몽슈뜨·2022년 12월 21일
0

TIL

목록 보기
27/70
post-thumbnail
  • 쿠키(Cookie): 브라우저가 서버로부터 응답으로 Set-Cookie 헤더를 받은 경우 해당 데이터를 저장한 뒤 모든 요청에 포함하여 보냅니다.
    • 데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약할 수 있습니다.
    • 쿠키는 userId=user-1321;userName=sparta 와 같이 문자열 형식으로 존재하며 쿠키 간에는 세미콜론(;) 으로 구분됩니다.


  • 세션(Session): 쿠키를 기반으로 구성된 기술입니다. 단, 클라이언트가 마음대로 데이터를 확인 할 수 있던 쿠키와는 다르게 세션은 데이터를 서버에만 저장하기 때문에 보안이 좋으나, 반대로 사용자가 많은 경우 서버에 저장해야 할 데이터가 많아져서 서버 컴퓨터가 감당하지 못하는 문제가 생기기 쉽습니다.


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

그렇다면 ‘/set-cookie’API를 호출했을 때 name=sparta 라는 쿠키를 할당하는 API를 만들어 볼까요?

  • Set-Cookie 를 이용하여 쿠키 할당하기
    app.get("/set-cookie", (req, res) => {
      const 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();
    });
  • res.cookie()를 이용하여 쿠키 할당하기


  • 3) req를 이용하여 쿠키 접근하기 클라이언트서버요청(Request)을 보낼 때 자신이 보유하고 있는 쿠키자동으로 서버에 전달하게 됩니다. 여기서 클라이언트가 전달하는 쿠키 정보는 Request header에 포함되어 서버에 전달되게 됩니다. 그렇다면 서버에서는 어떠한 방식으로 쿠키를 사용할 수 있을까요? 일반적으로 쿠키는 req.headers.cookie에 들어있습니다. req.headers는 클라이언트가 요청한 Request헤더를 의미합니다. /get-cookie에 접근했을 때, 설정된 쿠키를 출력하는 API를 만들어볼까요?
  app.get("/get-cookie", (req, res) => {
  const cookie = req.headers.cookie;
  console.log(cookie); // name=sparta
  return res.status(200).json({ cookie });
});
profile
개발자되면 맥북사줄께

0개의 댓글