[Node.js] 쿠키, 세션

GDORI·2024년 9월 6일
0

Node.js

목록 보기
5/11

쿠키와 세션은 사용자 정보를 저장하고 관리하는 데 사용되는 두 가지 주요 메커니즘입니다.

쿠키

개발자 Lou Montulli가 웹 쿠키를 개발하던 중 데이터를 저장하는 방식에 대해 고민하다가 그 당시 사용되었던 특정 데이터를 담고있는 작은 조각이라는 뜻을 지닌 magic cookie라는 용어를 떠올렸고 그렇게 cookie라고 불렸다합니다.

클라이언트 측에 저장되며, 사용자가 삭제하면 관련 정보가 삭제됩니다.
데이터를 여러 사이트에 공유할 수 있기 때문에 보안에 취약할 수 있습니다.
우리가 쇼핑몰에서 뭐 하나 보면, 광고가 따라 다니는 이유도 쿠키때문이죠.

세션

세션은 서버측에서 사용자의 상태를 저장하는 메커니즘입니다. 사용자가 접속하면 서버는 고유 세션 ID를 생성하여 클라이언트에게 전달하고 이 세션ID를 통하여 서버는 해당 사용자 정보를 추적합니다.
쿠키보다 안전하겠죠.

쿠키 만드는 법

2가지의 방법이 있습니다.
set-cookie
res.cookie()

set-cookie 의 경우 아래와 같이 작성합니다.

let expire = new Date();
  expire.setMinutes(expire.getMinutes() + 60); 

  res.writeHead(200, {
    'Set-Cookie': `name=sparta; Expires=${expire.toGMTString()}; HttpOnly; Path=/`,
  });
  return res.end();

현재 시간 + 쿠키를 유지할 시간을 expire 변수에 담고,
respon의 헤드부분에 Set-Cookie 안 데이터와 만료시간, args를 담아서 내보냅니다.

res.cookie()는 더 간편합니다.


let expires = new Date();
  expires.setMinutes(expires.getMinutes() + 60); 

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

쿠키 조회

기본적으로 쿠키는 Request의 헤드부분에 담겨져있습니다.

const cookie = req.headers.cookie;
  console.log(cookie); 
  return res.status(200).json({ cookie });

헤더부분에 있는 쿠키를 변수에 담고
그대로 json으로 응답해주면 됩니다.

cookie-parser 미들웨어를 사용하면, 더 간단하게 접근하고 쿠키의 내용을 json 객체로 받을 수 있습니다.


import cookieParser from 'cookie-parser';

app.use(cookieParser());

app.get('/get-cookie', (req, res) => {
  const cookies = req.cookies;
  console.log(cookies);
  return res.status(200).json({ cookie: cookies });
});

req.headers.cookie 부분이 req.cookies 로 바뀐 것을 알 수 있고, 조회되는 쿠키 정보도 json 객체인 것을 알 수 있습니다.

세션 만들기

let session = {};
app.get('/set-session', function (req, res, next) {
  
  const name = 'sparta';
  const uniqueInt = Date.now();

  session[uniqueInt] = { name };

  res.cookie('sessionKey', uniqueInt);
  return res.status(200).end();
});

set-session이 호출되면 name='sparta' 의 정보를 세션에 삽입하고 해당 정보를 검색하기 위한 시간정보를 쿠키로 전달합니다.

세션 조회


app.get('/get-session', function (req, res, next) {
  const { sessionKey } = req.cookies;

  const name = session[sessionKey];
  return res.status(200).json({ name });
});

쿠키에 담긴 sessionKey를 변수에 담아주고 그걸 토대로 세션 객체에서 조회 후 변수에 저장하여 json으로 응답합니다.

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글