일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- API
- form
- CLONE
- pug
- javscript
- Component
- CSS
- Session
- Mongoose
- Flutter
- DART
- NextJs
- express
- frontend
- 리액트
- ECMAScript
- nodejs
- node.js
- MongoDB
- react
- backend
- clonecoding
- HTML
- TypeScript
- 자바스크립트
- heroku
- ES6
- graphQL
- GRID
- JavaScript
- Today
- Total
Enjoy Programming
Express-session 추가 resave && saveUninitilaized 본문

session을 이용해 데이터베이스에 session data를 저장하는 코드이다.
resave, saveUninitialized가 있는데 이에 대해 좀 더 알아보자.
먼저 브라우저에서 쿠키값을 지워가며 refresh해주면

위 코드로는 지속적으로 mongoStore에 저장된다. 만약 로그인 할 유저가 아닌 bot이라던지 의미 없는 사용자가 거쳐가는 것만으로도
저장이 된다면 매우 불필요한 작업일 것이다. 그리고 브라우저에 접근한 사람이 많을 수록 비용도 거대해 질 것이다.
이를 해결하기 위해 모든 방문자에 대해 쿠키를 생성하지 않는 방법을 접근해보자.
모든 유저에게 주지 않고 로그인한 사용자에게만 쿠키를 생성한다.
먼저 resave와 saveUninitialize를 false로 바꿔주자.
그리고 db의 sessions 컬렉션과 브라우저의 쿠키를 삭제해주고 refresh!

refresh를 반복하여도 쿠키가 생성되지 않는다.
saveUninitialize - 세션이 새로 만들어지고 수정된 적이 없으면 초기화시키지 않는다~
그렇다면 세션은 어디에서 수정할 수 있는가...
예를 들어 컨트롤러에서 session을 조정하는 부분이다.

위는 로그인을 할때 사용하는 컨트롤러인데 로그인을 하면 session값이 조정이 되는 것이다.
한마디로 backend에서 로그인한 사용자에게만 쿠키를 주도록 설정하였다는 말이다.
session인증에서 문제점중 하나가 backend에서 db에 저장하는 것인데. 이렇게 하면 로그인한 유저만 session을 저장할 수 있다.
이를 위한 해결책으로 바로 token authentication이 있다. 예를 들어 ios나 android앱을 만들때는 쿠키가 없기 때문에
token을 사용한다. 현재는 token은 배우지 않았기에
이렇게 진행한다.
자 그럼 두 조건을 false로 두고 한번 테스트 해보자
그럼 로그인을 해보면 session에 변화가 생겼으니 저장이 되며 된다~!

refresh에서는 저장이 안되지만 로그인을 해서 session값에 변화가 생기면 ㅈ따라~~ 하며 db에 저장이 되어있다.