노드JS [Express]

[세션 session] 노드JS Session 정리글

훈츠 2020. 7. 1. 14:40
반응형

 

안녕하세요. 훈츠입니다. 금일은 Session 미들웨어 관해 정리 합니다. Cookie 만 가지고 인증작업을 하였을때는 보안문제가 발생하므로 Session 미들웨어를 이용하여 보통 구성합니다. 어떻게 구성하고 움직이는지 정리 해보도록 하겠습니다. 


목 차

  • 세션 미들웨어 동작 설명 및 설치 

  • 세션 이용한 기본 동작 구현 테스트

  • 세션 객체의 옵션 코드 

  • 전체 코드 공유 


세션 미들웨어 동작 설명 및 설치 

서버와 클라이언트 간 http 통신 할때, 서버가 쿠키를 발행하고 클라이언트가 쿠키를 저장합니다. 그리고 다시 재접속 할때 서버는 클라이언트의 쿠키를 확인 합니다. 

세션을 이용하면, 쿠키에 세션의 sid 값만 저장 합니다. 그러므로 이전 쿠키만 이용해서 내용을 저장할때의 정보가 저장 되는것이 아니라, sid 값을 가지고 서버에서 sid 를 가지고 서버 내부에 저장 되어 있는 DB 혹은 파일을 비교하여 내용을 확인 하는 메커니즘을 가지고 있습니다. 쿠키만 이용할때 보다는 보안이 강화 되었습니다. 

 

설치 방법 

npm install -s express-session 

 

프로 그램

var session = require('express-session');

 


세션 이용한 기본 동작 구현 테스트

사이트 참조 : http://expressjs.com/en/resources/middleware/session.html

 

Express session middleware

express-session Installation This is a Node.js module available through the npm registry. Installation is done using the npm install command: $ npm install express-session API var session = require('express-session') session(options) Create a session middl

expressjs.com

위의 사이트에 익스프레스 세션에 대한 설명서를 참조하세요. 

사이트에 나와있는 example 코드를 가지고 아래와 같이 테스트 해보았습니다. 

 

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
//Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드///
 
var express = require('express')
var session = require('express-session')
 
var app = express()
 
//이와 같이 session 을 use 에 세팅 합니다. 
app.use(session({
  secret: 'alkfjkldajfdlajfdiajf222'//id 값인 식별자 
  resave: false,                      //잘모르니깐 그대로 셋팅
  saveUninitialized: true             //잘모르니깐 그대로 셋팅
}))
 
 
app.get('/', function (req, res, next) {
  console.log(req.session);            //위의 코드가 req 안에 session 객체를 추가합니다.      
  if(req.session.num === undefined){
    req.session.num = 1                //session 객체안에 임의로 값을 정의합니다. 다음과 같이.
  }else {
    req.session.num = req.session.num + 1;
  }
  res.send(`Views : ${req.session.num}`);
})
 
 
app.listen(3000,()=>{
    console.log('server is running');
});
 
cs

 

위와 같이 리로드 될때 마다, 세션의 num 값이 증가 되는것을 확인 가능합니다.

 


세션 객체의 옵션 코드

 

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
32
33
34
35
36
//Hoons Blog---https://rain2002kr.tistory.com------------------------------------------------------------------코드///
 
var express = require('express')
var parseurl = require('parseurl')
var session = require('express-session')
var FileStore = require('session-file-store')(session);
 
var app = express()
 
//fileStore 에 session 저장
var fileStoreOptions = {};
 
app.use(session({
    secret: 'keyboard cat',
    resave: false,            //기본값으로 세팅 ,추후 필요하면 변경 
    saveUninitialized: true,  //기본값으로 세팅 ,추후 필요하면 변경 
    store: new FileStore(fileStoreOptions) //session의 휘발성 메모리가 아닌 fileStore에 저장 합니다. 
}));
 
 
//위의 app.use 로 인해 req 안에 session객체가 생기고 아래처럼 num을 할당하면 저장된다.  
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}`);
})
 
 
app.listen(3000, ()=>{
    console.log('server is running')
})
 
cs

옵션

secret : sid 값 입니다. 

resave : false  (session 의 값이 변화가 있을때만 저장합니다. true 일 경우는 무조건 저장 합니다.)

saveUninitialized : true (디폴트 사용합니다.)

store : new FileStore() //Session 은 휘발성메모리입니다. 대체 저장영역을 세팅합니다. 

 


전체 코드 공유

 

 

 

 

Connecting...

{0}Synology C2 30일 무료 평가판{1}을 시작하여 Synology NAS에 가장 적합한 공용 클라우드 백업 서비스를 경험해 보십시오.

gofile.me