반응형
Cookie
- 웹브라우저는 기본적으로 cookie(쿠키)라는 것을 지원한다.
- 쿠키를 활용하면 서버로부터 받은 데이터 중 일부를 브라우저 자체적으로 저장해놓고 추후 활용할 수 있다. (접속 URL은 동일해야함)
- 따라서 사용자가 브라우저를 사용하는 동안은 이러한 쿠키를 기반으로 정보가 저장 및 관리될 수 있다는 것이다.
- 이러한 cookie를 관리하려면 node.js express에서는 별도의 패키지가 필요하다.
패키지 설치
$ npm install cookie-parser
cookie-parser
는 이러한 브라우저의 쿠키데이터를 node.js가 확인하고 관리할 수 있도록 도와주는 패키지(미들웨어)이다.
사용예제
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/', function (req, res) {
if (req.cookies.count) {
var count = req.cookies.count;
} else {
req.cookies.count = 0;
}
console.log('Cookies: ', req.cookies);
res.cookie('count', count+1);
})
app.use(cookieParser())
로 모든 쿠키값을 정상적으로 확인할 수 있도록 앞서 처리한다.req.cookies
로 현재 브라우저의 쿠키값들을 확인할 수 있다.res.cookie
로 현재 브라우저에게 특정 쿠키값을 전달할 수 있다.- 위 페이지는 쿠키값에서
count
값을 받아 매번 1씩 더한다음 다시 브라우저의 쿠키를 설정하는 작업을 수행하고 있다.
Cookie & Security
- 대부분의 쿠키는 외부에 노출되어선 안된다. 따라서 기본적인 암호화가 필요하다.
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser('SECURITY KEY'));
app.get('/', function (req, res) {
if (req.signedCookies.count) {
var count = req.signedCookies.count;
} else {
req.cookies.count = 0;
}
console.log('Cookies: ', req.signedCookies);
res.cookie('count', count+1, {signed: true});
})
app.use(cookieParser('SECURITY KEY'))
로 쿠키값을 암호화하여 관리할 수 있다.- 쿠키값들을 불러올 때도
req.signedCookies
를 활용해야 불러올 수 있다. - 쿠키를 브라우저상에 새로 설정할때도
{signed: true}
옵션을 주어 암호화된 값을 넘겨주도록 한다.
cf. Session cookie vs Permanent cookie
- Session cookie : 웹브라우저가 켜져있을 때만 유효 (재실행시 사라짐)
- Permanent cookie : 웹브라우저를 재실행해도 유지됨
res.cookie('myCookie', 'set Cookie', {maxAge:3000}); // 초단위
- 아무것도 설정하지 않으면 Session cookie가 되고,
maxAge
혹은expires
로 만료기간을 설정하면 Permanent cookie가 된다.
그 외 다양한 쿠키의 옵션
Secure
: https로 통신하는 경우만 웹브라우저가 쿠키를 전송하도록 한다.HttpOnly
: 자바스크립트에서 document.cookie로 쿠키값에 접근하지 못하게 막아준다.Path
: 설정한 경로 안에서만 쿠키가 활성화 됨Domain
: 서브 도메인을 쿠키저장 범위에 포함시킬 수 있음
반응형
'🛠 기타 > WEB' 카테고리의 다른 글
Node.js - Passport.js 기초 (0) | 2021.02.03 |
---|---|
Node.js - session (0) | 2021.02.02 |
Node.js - multer (파일 업로드) (0) | 2021.01.31 |
Node.js - Sequelize (0) | 2021.01.28 |
Nest.js - nest.js 환경에서 GraphQL 사용하기 (0) | 2021.01.13 |