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);