티스토리 뷰

session

express에서 세션 사용하기

$ npm install express-session --save

세션을 초기화 할 때 옵션

  • name : 세션 ID의 키 이름(쿠키). 기본값은 connect.sid
  • resave : 변경 사항이 없어도 저장. 옵션 작성 필요
  • saveUninitialized : 세션 초기화 전에도 저장. 옵션 작성 필요
  • secret : 세션 ID 서명
  • store : 세션 저장소
  • cookie : 쿠키 옵션(domain, path, expires, maxAge). 쿠키 파서 없이 사용 가능 19

세션 예제

  • 예제는 express도 설치해야 한다.
$ npm install express express-session --save
const express = require('express');
const session = require('express-session');

const app = express();
app.use(session({
   secret: 'Secret Key',
   resave: false,
   saveUninitialized: false
   // ,cookie:{maxAge:3000} // 쿠키의 maxAge를 이용해서 세션 유효기간 설정. 3초
}));

// 파비콘 무시
app.use('/favicon.ico',  () => {});

app.use(function (req, res) {
   // 세션 ID
   const sessionID = req.sessionID;
   console.log('session id :', sessionID);

   // 방문 횟수
   console.log('sessionVisit : ', req.session.sessionVisit);
   if (req.session.sessionVisit)
      req.session.sessionVisit = parseInt(req.session.sessionVisit) + 1;
   else
      req.session.sessionVisit = 1;

   // 마지막 방문 날짜
   var now = new Date();
   var last = now.getFullYear() + '.' + (now.getMonth() + 1) + '.' + now.getDate();
   req.session.sessionLast = last;

   // 첫 방문 날짜
   if (!req.session.sessionSince) {
      req.session.sessionSince = last;
   }


   // 쿠키 접근하기
   const cookies = req.session.cookie;
   console.log('cookies : ', cookies);

   res.send({
      sessionVisit: req.session.sessionVisit,
      sessionSince: req.session.sessionSince,
      sessionLast: req.session.sessionLast
   });
});

app.listen(3000);

서버가 재 시작해도 session을 잃어버리지 않기

connect mongo

$ npm install connect-mongo --save

세션 저장 예제

const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

const app = express();
const sessionStoreOptions = {
   url: 'mongodb://localhost:27017/session'
   ,ttl : 3   // 세션 유효기간 초 단위. 3초
   // ,autoRemove : 'interval' // 주기적으로 제거
   // ,autoRemoveInterval: 1 // 분 단위
};
app.use(session({
   secret: 'Secret Key',
   resave: false,
   saveUninitialized: false,
   store: new MongoStore(sessionStoreOptions)
}));

// 파비콘 무시
app.use('/favicon.ico', () => {
});

app.use( (req, res) => {
   console.log('req.session', req.session);
   // 세션 ID
   const sessionID = req.sessionID;
   console.log('session id :', sessionID);

   // 방문 횟수
   console.log('sessionVisit : ', req.session.sessionVisit);
   if (req.session.sessionVisit)
      req.session.sessionVisit = parseInt(req.session.sessionVisit) + 1;
   else // 방문한 적이 없으면 1로 초기화
      req.session.sessionVisit = 1;

   // 마지막 방문 날짜
   const now = new Date();
   const last = now.getFullYear() + '.' + (now.getMonth() + 1) + '.' + now.getDate();
   req.session.sessionLast = last;

   // 첫 방문 날짜
   if (!req.session.sessionSince) {
      req.session.sessionSince = last;
   }

   res.send({
      sessionVisit: req.session.sessionVisit,
      sessionSince: req.session.sessionSince,
      sessionLast: req.session.sessionLast
   });
});

app.listen(3000);


'Develop > Node.js' 카테고리의 다른 글

[node.js] 'socket.io' module  (0) 2018.06.17
[node.js] transmission  (0) 2018.05.13
[node.js] Callback 지옥에서 벗어나보기  (0) 2018.03.26
[node.js] 'url' module  (0) 2018.03.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31