WEB/🌳 Node.js

[Node.js] 11. 쿠키의 생성과 사용

무딘붓 2022. 8. 7. 22:27

 

쿠키란?

 

간단히 요약하면, 웹 서버가 브라우저에게 지시하여 사용자 로컬 컴퓨터에 저장하는 4K 이하의 작은 데이터이다.

 

쿠키는 HTTP가 무상태 프로토콜(바로 이전 요청과 현재 요청이 연결되어 있음을 기억하지 않는 통신)이라는 약점을 보완하기 위해 도입하였으며, name=value 형태로 저장된다. 

 


쿠키 생성

var http = require('http');
var cookie = require('cookie');

http.createServer(function(request,response){
    // 쿠키 생성
    response.writeHead(200, {
        'Set-Cookie':['yummy_cookie=choco','tasty_cookie=strrawberry']
    });

    response.end('cookie!!');
}).listen(3000);

쿠키는 위와 같이 간단하게 응답 헤더에 작성하여 생성한다.

 


쿠키 읽어들이기

 

쿠키를 읽어들이는 것은 추가 모듈이 없어도 가능하지만 (방법 링크), 쿠키가 여러개인 경우 복잡하므로 모듈을 설치하면 간단하게 다룰 수 있게 된다.

npm install cookie

위와 같은 방법으로 쿠키 모듈을 설치하면 다음과 같이 쿠키를 읽어들일 수 있다.

var http = require('http');
var cookie = require('cookie');

http.createServer(function(request,response){
    // 쿠키 생성
    response.writeHead(200, {
        'Set-Cookie':['yummy_cookie=choco','tasty_cookie=strrawberry']
    });

    // 쿠키 읽기
    var cookies = {};
    if(request.headers.cookie!== undefined){
        cookies = cookie.parse(request.headers.cookie);
    } 
    console.log(cookies);

    response.end('cookie!!');
}).listen(3000);

Session cookie와 Permanent Cookie

 

쿠키는 크게 Session cookie와 Permanent Cookie로 구분할 수 있다.

Session cookie는 웹 브라우저가 종료되면 자동으로 소멸되지만,

Permanent Cookie 웹브라우저가 종료되어도 사라지지 않는다.

 

Permanent cookie를 만드는 방법은 쿠키를 만들때 Expires 또는 Max-Age를 사용하면된다.

Expires는 cookie가 만료되는 절대적 시간을 지정하는 것이고,

Max-Age는 현재부터 설정하고자 하는 만료시점까지의 시간을 초로 환산한 값이다.

 

사용 예시는 다음과 같다.

response.writeHead(200, {
  'Set-Cookie': [
    `cookie1=choco; Expires=Tue, 19 Jan 2038 03:14:07 GMT`,
    `cookie2=mint; Max-Age=${60*60}`		// 1시간 뒤에 쿠키가 삭제.
  ]
});

 

이것을 조금만 응용하면 쿠키 삭제에도 사용할 수 있다.

삭제할 쿠키와 같은 이름의 쿠키를 생성하고, Max-Age를 0으로 설정하면 바로 해당 쿠키는 소멸된다.

response.writeHead(200, {
  'Set-Cookie': [
    `cookie1=; Max-Age=0`,
    `cookie2=; Max-Age=0`		// 0초 뒤에 쿠키가 삭제.
  ]
});

Secure 와 HttpOnly

 

Secure옵션을 설정하면 HTTPS로 통신하는 경우에만 쿠키가 전송된다.

HttpOnly옵션을 설정하면 Http 통신을 할 때만 쿠키가 전송된다. 자바스크립트 등으로는 쿠키를 가져올 수 없게 된다.

 

사용 예시는 다음과 같다.

response.writeHead(200, {
  'Set-Cookie': [
    `cookie1=choco; Secure`,
    `cookie2=mint; Httponly`
  ]
});

Path 와 Domain

 

Path 옵션은 해당 경로나 그 경로의 하위 경로에 있는 페이지만 쿠키에 접근할 수 있게 한다. Path 옵션을 지정하지 않았을 때의 default는 현재 경로가 된다.

예를 들어, path=/admin 옵션을 사용하여 설정한 쿠키는 /admin과 /admin/something에선 볼 수 있지만, /home 이나 /adminpage에선 볼 수 없다.

 

Domain옵션은 쿠키에 접근 가능한 domain(도메인)을 지정한다. domain 옵션에 아무 값도 넣지 않았다면, 쿠키를 설정한 도메인에서만 쿠키에 접근할 수 있다.

예를 들어, site.com에서 설정한 쿠키는 other.com에서 얻을 수 없고, 서브 도메인(subdomain)인 forum.site.com에서도 쿠키 정보를 얻을 수 없다.

 

사용 예시는 다음과 같다.

response.writeHead(200, {
  'Set-Cookie': [
    `cookie1=choco; Path=/choco`,
    `cookie2=mint; Domain=mint.com`
  ]
});

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

[Node.js] 12. 세션(Session)  (0) 2022.08.08
[Express] 2. 미들웨어  (0) 2022.08.06
[Express] 1. 설치방법과 라우팅  (0) 2022.08.06
[Node.js] 10. MySQL 연동  (0) 2022.08.05
[Node.js] 9. 패키지 매니저 npm  (0) 2022.08.02