본문 바로가기

Node.js

[Node] 쿠키와 세션

쿠키

- 유효기간이 있음

- 키-값의 쌍 형태

- 서버는 미리 클라이언트에 요청자를 추정할 만한 정보를 쿠키로 만들어 보내고, 그 다음부터는 클라이언트로부터 쿠키를 받아 요청자를 파악

 

서버에서 쿠키 만들기

const http = require('http');

http.createServer((req, res) => {
  console.log(req.url, req.headers.cookie);
  res.writeHead(200, { 'Set-Cookie': 'mycookie=test' });
  res.end('Hello Cookie');
})
  .listen(8083, () => {
    console.log('8083번 포트에서 서버 대기 중입니다!');
});

- 쿠키는 문자열 형식(mycookie=test)으로 존재, 쿠키 간에는 세미콜론으로 구분

- req.headers.cookie : 쿠키가 들어있는 곳

- req.headers : 요청의 헤더 (쿠키는 요청과 응답의 헤더를 오간다는 것을 알 수 있음!)

- Set-Cookie : 응답의 헤더에 mycookie-test라는 쿠키를 심으라고 브라우저에게 명령

 

쿠키 설정 옵션들

 쿠키명=쿠키값: 기본적인 쿠키의 값입니다. mycookie=test 또는 name=zerocho와 같이 설정합니다.

 Expires=날짜: 만료 기한입니다. 이 기한이 지나면 쿠키가 제거됩니다. 기본값은 클라이언트가 종료될 때까지입니다.

 Max-age=초: Expires와 비슷하지만 날짜 대신 초를 입력할 수 있습니다. 해당 초가 지나면 쿠기가 제거됩니다. Expires보다 우선합니다.

 Domain=도메인명: 쿠키가 전송될 도메인을 특정할 수 있습니다. 기본값은 현재 도메인입니다.

 Path=URL: 쿠키가 전송될 URL을 특정할 수 있습니다. 기본값은 ‘/’이고, 이 경우 모든 URL에서 쿠키를 전송할 수 있습니다.

 Secure: HTTPS일 경우에만 쿠키가 전송됩니다.

 HttpOnly: 설정 시 자바스크립트에서 쿠키에 접근할 수 없습니다. 쿠키 조작을 방지하기 위해 설정하는 것이 좋습니다.

 

 

쿠키로 로그인 서버 구현하기

 

GitHub - yexjin/node-study: 이번엔 기필코 끝내고만다..✨

이번엔 기필코 끝내고만다..✨. Contribute to yexjin/node-study development by creating an account on GitHub.

github.com

 

❗️쿠키의 조작 위험성

- 개발자 도구에서 Application 탭에서 보이는 것처럼 쿠키가 노출되어 있음

- 민감한 개인정보를 쿠키에 넣어두는 것은 적절하지 못함

 

 

세션 쿠키

- 세션을 위해 사용하는 쿠키

- 쿠키를 사용해 세션 아이디를 주고받는 식

   //  쿠키에 이름을 담아서 보내는 대신 uniqueInt 라는 속성 명 아래에 있는 session 변수에서 사용자 정보를 가져와 사용
    // - 서버에 사용자 정보를 저장하고 클라이언트와는 세션 아이디로만 소통
    res.writeHead(302, {
      Location: '/',
      'Set-Cookie': `session=${uniqueInt}; Expires=${expires.toGMTString()}; HttpOnly; Path=/`,
    });

- 실제 배포용 서버에서는 세션을 위와 같이 변수에 저장하지는 않음 : 서버가 멈추거나 재시작되면 메모리에 저장된 변수가 초기화되기 때문 + 또한 서버의 메모리가 부족하면 세션을 저장하지 못하는 문제도 생김

- 따라서 보통 레디스멤캐시드 같은 데이터베이스에 넣어둠

 

 

 

 


Reference

- Node.js 교과서 개정 2판

'Node.js' 카테고리의 다른 글

[Node] cluster  (0) 2022.12.11
[Node] https와 http2  (0) 2022.12.11
[Node] REST, HTTP 메서드 개념  (0) 2022.12.11
[Node] 이벤트, 이벤트 메서드  (0) 2022.12.10
[Node] 파일시스템, 버퍼, 스트림 알아보기  (0) 2022.12.10