쿠키(Cookie)
쿠키는 클라이언트 웹 브라우저에 저장되는 정보이다.
익스프레스에선 cookie-parser 모듈을 이용해 쿠키를 설정하거나 사용할 수 있다.
cookie-parser는 쿠키 헤더를 파싱하여 요청 객체(req)의 cookies 속성에 할당한다.
설치
$ npm install cookie-parser
사용 방법
만약 암호화된 쿠키를 사용하기 위해선 cookieParser() 메소드의 인자로 임의의 문자열(secret key)을 전달하면 된다(아래 예제 코드에서 확인할 수 있다). 이 경우 쿠키 옵션에서 signed의 값으로 true를 할당해야 한다.
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser()); // cookieParser(secretKey, optionObj)
쿠키 생성
쿠키는 다음과 같이 생성할 수 있다. 옵션은 객체 형식으로 전달할 수 있다.
res.cookie('쿠키이름', '쿠키값', '옵션객체');
옵션 종류
- maxAge : 쿠키의 수명을 밀리초 단위로 설정
- expires : 만료 날짜를 GMT 시간으로 설정
- path : 해당 디렉토리와 하위 디렉토리에서만 경로가 활성화되고, 웹 브라우저는 해당하는 쿠키만 웹 서버에 전송한다.
- domain : 도메인 네임 default “loaded”
- secure : 웹브라우저와 웹서버가 https로 통신하는 경우만 웹브라우저가 쿠키를 서버로 전송한다.
- httpOnly : 웹 서버를 통해서만 쿠키에 접근할 수 있다. 자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는다.
- signed : 쿠키의 암호화를 결정한다.
예제 코드
...
app.use(cookieParser('some_secret_1234'));
// 쿠키 옵션 설정
const cookieConfig = {
httpOnly: true,
maxAge: 1000000,
signed: true
};
// 쿠키 설정
app.get('/set', (req, res) => {
res.cookie('key', 'value', cookieConfig);
res.send('set cookie');
});
// 쿠키 확인
app.get('/get', (req, res) => {
res.send(req.cookies);
});
세션(Session)
세션 또한 쿠키와 마찬가지로 상태 정보를 저장하지만, 민감하고 중요한 정보를 다루기 때문에 웹 서버에 저장된다.
익스프레스에선 express-session 모듈로 세션을 지원한다.
설치
$ npm install express-session
사용 방법
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));
옵션 종류
- secret: 보안을 위한 임의의 문자열(secret key)
- resave: 세션 데이터가 바뀌기 전까지 세션저장소의 값을 저장할 지 여부(default: false)
- saveUninitialized: 세션이 필요하기 전에 세션을 구동할지 여부(default: true)
- store: 세션저장소를 지정
예제 코드
const express = require('express');
const session = require('express-session');
const FileStore = require('session-file-store')(session);;
const app = express();
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
store: new FileStore()
}));
app.get('/', function (req, res, next) {
console.log(req.session);
if(req.session.num === undefined){
req.session.num = 1;
} else {
req.session.num = req.session.num + 1;
}
res.send(`Views : ${req.session.num}`);
});
예제 코드에선 세션저장소로서 파일을 선택했지만, DB에 연결하여 사용할 수도 있다.
'웹 > Node.js' 카테고리의 다른 글
[Node.js] JWT: Access Token & Refresh Token 인증 구현 (16) | 2021.04.06 |
---|---|
[Node.js] MongoDB: 개념 및 기본 쿼리문 (0) | 2021.03.14 |
[Node.js] Express 5: 에러 처리(Error Handling) (0) | 2021.02.22 |
[Node.js] Express 4: 라우터(Router) (1) | 2021.02.20 |
[Node.js] Express 3: 미들웨어(Middleware) (0) | 2021.02.20 |