Node.js

Node.js cookie 쿠키 생성하고 읽기

헤이봄봄 2021. 6. 1. 18:34
cookie 

웹브라우저와 웹서버가 서로 주고받는 정보인

http protocol에 포함되어있는 기술

 

 

쿠키의 핵심 용도3가지

1. 세션 관리(Session management)

   서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리

2. 개인화(Personalization)

   사용자 선호, 테마 등의 세팅

3. 트래킹(Tracking)

   사용자 행동을 기록하고 분석하는 용도

 

 

쿠키 생성방법

set-cookie라고하는 이름의 헤더값을 응답하는 http메세지에  다음과같이 넣어준다

Set-Cookie: <cookie-name>=<cookie-value>

 

적용예시

var http = require('http');
http.createServer(function (request, response) {
	response.writeHead(200, {
		'Set-Cookie': ['yummy_cookie = choco', 'tasty_cookie = strawberry']
	});
	response.end('Cookie!!');
}).listen(3000);

 

다음과같이 쿠키가 저장되는 것을 볼 수 있다. 

 

쿠키읽기

생성된 쿠키를 다시 서버쪽으로 전송하게되면

request.headers.cookie 로 읽을 수 있다. 

var http = require('http');
http.createServer(function (request, response) {
	console.log(request.headers.cookie);
	response.writeHead(200, {
		'Set-Cookie': ['yummy_cookie = choco', 'tasty_cookie = strawberry']
	});
	response.end('Cookie!!');
}).listen(3000);


//yummy_cookie=choco; tasty_cookie=strawberry

 

하지만 쿠키를 읽어올때 가독성이 좋지않으므로

npm에서 cookie를 핸들링하는 모듈을 이용해서 객체로 불러오도록 하자

 

 

 

 

설치방법
npm install -s cookie

 

쿠키모듈 사용법
var cookie = require('cookie');

cookie모듈을 요청하고

 

 

cookie.parse안에 인자값으로 

request.headers.cookie를 넣어주면 객체로 나타내준다. 

cookie.parse(request.headers.cookie);

 

var http = require('http');
var cookie = require('cookie');
http.createServer(function (request, response) {
	var cookies = cookie.parse(request.headers.cookie);
	console.log(cookies);
	response.writeHead(200, {
		'Set-Cookie': ['yummy_cookie = choco', 'tasty_cookie = strawberry']
	});
	response.end('Cookie!!');
}).listen(3000);



//{ yummy_cookie: 'choco', tasty_cookie: 'strawberry' }

 

여기서 yummy_cookie의 값에 접근하고싶다면

console.log(cookies.yummy_cookie)로 접근하여 'choco'라는 값을 얻어낼 수 있다. 

 

 

 

하지만 위의 코드는 쿠키값이 있을때엔 문제가 없지만

쿠키값이 없으면

request.headers.cookie 로 불러온 값이 undefined이 되면서 에러가 난다. 

 

때문에 if문을 사용하여 undefined가 아닐 경우에만 cookie.parse가 적용되도록 해주면 더이상 에러가 나지않는다. 

var http = require('http');
var cookie = require('cookie');
http.createServer(function (request, response) {
	console.log(request.headers.cookie);
	var cookie = {};
	if (request.headers.cookie !== undefined) {
		cookies = cookie.parse(request.headers.cookie);
	}
	console.log(cookies.yummy_cookie);
	response.writeHead(200, {
		'Set-Cookie': ['yummy_cookie = choco', 'tasty_cookie = strawberry']
	});
	response.end('Cookie!!');
}).listen(3000);