세션은 쿠키처럼 사용자의 정보를 그대로 값으로 가지지 않고 cid나 sessionId만을 쿠키에 넣고,
서버에서 관리하기 때문에 탈취해도 값을 알아내기가 어렵다.
express-session은 node.js에서 이를 가능하게 해준다.
const express = require('express');
const app = express();
const session = require('express-session'); //세션관리용 미들웨어
const fileStore = require('session-file-store')(session);
app.use(session({
httpOnly: true, //자바스크립트를 통해 세션 쿠키를 사용할 수 없도록 함
secure: ture, //https 환경에서만 session 정보를 주고받도록 처리
secret: 'secret key', //암호화하는 데 쓰일 키
resave: false, //세션을 언제나 저장할지 설정함
saveUninitialized: true, //세션이 저장되기 전 uninitialized 상태로 미리 만들어 저장
cookie: { //세션 쿠키 설정 (세션 관리 시 클라이언트에 보내는 쿠키)
httpOnly: true,
secure: true
},
store: new fileStore()
}));
app.use로 session 미들웨어를 쓰면 되는데, session 미들웨어는 매개변수로 객체를 받는다.
객체 안에는 secret, resave, saveUninitialized, cookie, store 등 여러 가지 옵션이 있다.
req.session으로 세션 객체에 접근할 수 있으며, 생성도 가능하다.
req.session.세션명 = 세션value;
세션을 저장소에 저장하고 저장소의 내용을 메모리의 내용으로 바꿔줌
HTTP 응답이 끝날 때 자동으로 후출되어서 일반적으로는 굳이 호출할 필요가 없다.
redirects를 할때에는 유용하게 사용한다고 하는데 아직 와닿지는 않는다.
req.session.save(function(err) {
// session saved
})
세션을 파괴하고 req.session속성 을 설정 해제한다.
스프린트에서는 로그아웃을 구현할때 이 메소드를 사용했다.
req.session.destroy(function(err) {
// cannot access session here
})
https://www.npmjs.com/package/express-session
http://expressjs.com/en/resources/middleware/session.html
https://dev-dain.tistory.com/68