Back Ground

Node - Express 미들웨어 express-session 본문

Javascript/Node.js

Node - Express 미들웨어 express-session

Back 2019. 2. 27. 04:24


express-session


세션 관리용 미들웨어이다.

로그인 등의 이유로 세션을 구현할 때 매우 유용하다.

express-generator로는 설치되지 않으므로 다음과 같이 직접 설치해야 된다.


npm i express-session


설치 후 app.js에 express-session을 연결한다.


app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
var logger = require('morgan');
var session = require('express-session');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
...
 
app.use(cookieParser('secret code'));
app.use(session({
    resave: false,
    saveUninitialized: false,
    secret: 'secret code',
    cookie: {
        httpOnly: true,
        securefalse,
    },
}));
...
cs


express-session 1.5 버전 이전에는 내부적으로 cookie-parser를 사용하고 있어서 

cookie-parser 미들웨어 보다 뒤에 위치해야 했지만, 

1.5버전 이후부터 사용하지 않게 되어 순서가 상관 없어졌다.

그래도 현재 어떤 버전을 사용하고 있는지 모른다면 cookie-parser 미들웨어 뒤에 놓는 것이 안전하다.


express-session은 인자로 세션에 대한 설정을 받는다.

[ express-session 옵션들 ]

 resave

 요청이 왔을 때 세션에 수정사항이 생기지 않더라도 세션을 다시 저장할지에 대한 설정

 saveuninitialized

 세션에 저장할 내역이 없더라도 세션을 저장할지 대한 설정 (보통 방문자를 추적할 때 사용된다.)

 secret

 필수항목으로 cookie-parser의 비밀 키와 같은 역할을 한다

 cookie

 세션 쿠키에 대한 설정


- express-session은 세션 관리 시 클라이언트에 쿠키를 보낸다.

이를 세션 쿠키 라고 부른다.


안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 하고,

쿠키를 서명하는데 secret의 값이 필요하다.

cookie-parser의 secret과 같게 설정해야 한다. 







[ cookie옵션 제공 종류 ]

  • maxAge
  • domain
  • path
  • expires
  • sameSite
  • httpOnly
  • secure

등.. 일반적인 쿠키 옵션이 모두 제공된다.



현재 httpOnly를 사용해서 클라이언트에서 쿠키를 확인하지 못하도록 했고,

 securefalse로 해서 https가 아닌 환경에서도 사용 할 수 있게 했다.


배포 시에는 https를 적용하고 secure도 true로 설정하는 것이 좋다






- express session store옵션

예제 코드에는 없지만, store라는 옵션도 있다.

현재는 메모리에 세션을 저장하도록 되어 있다.

문제는 서버를 재 시작하면 메모리가 초기화 되어 세션이 모두 사라진다는 것이다.


따라서 배포 시에는 store에 데이터베이스를 연결하여 세션을 유지한 것이 좋다.

( 보통 레디스(Redis)가 쓰인다. )


[사용방법 ( npm 추가 )]

학습 : https://opentutorials.org/course/3400/21838





express-session은 req 객체안에 req.session 객체를 만든다.

이 객체에 값을 대입하거나 삭제해서 세션을 변경할 수 있다.


나중에 세션을 한번에 삭제하려면 req.session.destroy()메서드를 호출하면된다.

현재 세션의 아이디req.sesstionID확인 할수있다.






출처 : node.js 교과서

Comments