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시간)
}
}));
- secret: 세션 ID 쿠키를 서명하는 데 사용되는 비밀 키
- name: 세션 ID 쿠키의 이름을 설정. 기본값은
connect.sid
이다. - resave: 세션이 변경되지 않았어도 세션을 강제로 저장소에 저장할지 여부를 결정 일반적으로 false로 설정하는 것이 좋다.
- saveUninitialized: 초기화되지 않은 세션을 세션 저장소에 강제로 저장할지 여부를 결정. GDPR 준수를 위해 false로 설정하는 것이 좋습니다.
- cookie: 세션 ID 쿠키에 대한 설정을 제공. 이 객체 내에서 maxAge, httpOnly, secure 등의 속성을 설정할 수 있다.
- 기본값 : { path: '/', httpOnly: true, secure: false, maxAge: null }.
- maxAge: 쿠키의 유효 기간을 밀리초 단위로 설정.
- httpOnly: 쿠키가 클라이언트 사이드 JavaScript에 의해 접근되지 않도록 한다.
- secure: 쿠키가 HTTPS를 통해서만 전송된다.
- rolling: 각 요청에 대해 세션 쿠키 세트를 강제로 설정할지 여부를 결정. 이는 세션 만료 시간을 연장하는 데 사용될 수 있다.
- store: 세션 데이터를 저장할 저장소를 설정합니다.
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로 사용하기