더북(TheBook)

6.2.5 express-session

세션 관리용 미들웨어입니다. 로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장해둘 때 매우 유용합니다. 세션은 사용자별로 req.session 객체 안에 유지됩니다.

app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
  name: 'session-cookie',
}));

express-session 1.5 버전 이전에는 내부적으로 cookie-parser를 사용하고 있어서 cookie-parser 미들웨어보다 뒤에 위치해야 했지만, 1.5 버전 이후부터는 사용하지 않게 되어 순서가 상관없어졌습니다. 그래도 현재 어떤 버전을 사용하고 있는지 모른다면 cookie-parser 미들웨어 뒤에 놓는 것이 안전합니다.

express-session은 인수로 세션에 대한 설정을 받습니다. resave는 요청이 올 때 세션에 수정 사항이 생기지 않더라도 세션을 다시 저장할지 설정하는 것이고, saveUninitialized는 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지 설정하는 것입니다. 현재는 둘 다 필요 없으므로 false로 했습니다.

express-session은 세션 관리 시 클라이언트에 쿠키를 보냅니다. 4.3절에서 배운 세션 쿠키가 이것입니다. 안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 하고, 쿠키를 서명하는 데 secret의 값이 필요합니다. cookie-parser의 secret과 같게 설정하는 것이 좋습니다. 세션 쿠키의 이름은 name 옵션으로 설정합니다. 기본 이름은 connect.sid입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.