express-session

import session from "express-session";
...
app.use(
  session({
    secret: "hello",
    resave: true,
    saveUninitialized: true,
  })
);

저장된 세션 확인

app.use((req, res, next) => {
  req.sessionStore.all((err, sessions) => {
    console.log(sessions);
    next();
  });
});

현재는 세션id가 메모리에 저장되어서 서버 리부트하면 리셋되는 문제가 있음.

→ DB 저장 필요

브라우저에게 준 세션 ID를 다시 요청할 때 보내오기 때문에 세션 오브젝트에 어떤 값을 추가해놓으면 그게 계속 유지됨.

expires 세팅하려면?

app.use(
  session({
		...
    cookie: {
      maxAge: 20000, // ms
    },
  })
);

MongoStore

express-session으로 받은 session 데이터는 기본적으로 메모리에 적장됨. 즉 재실행 시 없어짐.

이를 해결하려면 db에 저장해야함.

express-session 미들웨어로 사용할 때 store 옵션으로 저장하는 곳을 바꿀 수 있음.

여러 방식이 있는데 그 중 하나가 connect-mongo 라는 모듈 (MongoStore 라고 부르는거 같음)

connect-mongo

import MongoStore from "connect-mongo";
...

app.use(
  session({
    ...
    store: MongoStore.create({ mongoUrl: "mongodb://127.0.0.1:27017/wetube" }),
  })
);

Uninitialized Sessions

웹 사이트에 방문하는 사람마다 세션 생성 시 db에 너무 많은 데이터가 쌓인다.

saveUninitialized: false

resave: false

app.use(
  session({
    ...
    resave: false,
    saveUninitialized: false,
  })
);