express-session

epxress-session 공식문서
express의 세션 관리용 미들웨어이다.
세션은 req.session 객체에 유지된다.

session 설정

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

app.use(session({
  secret: 'your-secret-key', // 세션을 암호화하기 위한 비밀 키
  resave: false, // 세션이 변경되지 않았다면 다시 저장하지 않음
  saveUninitialized: false, // 초기화되지 않은 세션은 저장하지 않음
  cookie: {
    httpOnly: true, // 쿠키가 클라이언트 사이드 JavaScript에 의해 접근되지 않도록 함
    secure: false, // HTTPS를 통해서만 쿠키를 전송
    maxAge: 1000 * 60 * 60 // 쿠키의 유효 기간 설정 (여기서는 1시간)
  }
}));

session 접근

req.session 객체를 통해서 session에 접근할 수 있다.
이 객체를 사용해서 session 데이터를 읽고 쓸 수 있다.

app.get('/session', (req, res) => {
  if (req.session.username) {
    res.send(`Welcome back, ${req.session.username}!`);
  } else {
    res.send('Please login to view this page.');
  }
});

app.post('/login', (req, res) => {
  // 사용자 인증 과정 (예시로 간단히 처리)
  const { username } = req.body;
  req.session.username = username; // 세션에 사용자 이름 저장
  res.send(`Logged in as ${username}`);
});

session destroy

사용자가 로그아웃 하거나 session을 종료하고 싶을 때, req.session.destroy()을 이용할 수 있다.

app.get('/logout', (req, res) => {
  req.session.destroy(err => {
    if (err) {
      res.status(500).send('Could not log out.');
    } else {
      res.send('Logout successful.');
    }
  });
});

session storage

기본적으로 express session은 session을 memory에 저장한다.
즉, 애플리케이션을 껏다 키면 session은 사라지게 된다.

file 혹은 db를 session storage로 사용할 수 있다.

login session에서는 redis를 session storage로 많이 사용하곤 한다.
node에서 Redis 사용하기#node에서 redis를 session storage로 사용하기