TypeScript와 Express-session으로 로그인 처리하기 (3): 로그인 유지와 로그아웃
로그인 유지 기능은 인증을 대신하지 않습니다. 비밀번호 검증과 세션 재발급이 성공한 뒤에만 사용자의 선택에 따라 세션 수명을 늘리고, 로그아웃 때는 서버 저장소의 세션까지 파기해야 합니다.
remember-me 수명 설정
typescript
const fourteenDaysInMs = 14 * 24 * 60 * 60 * 1000;
req.session.cookie.maxAge = isRemember
? fourteenDaysInMs
: undefined;express-session의 cookie.maxAge 단위는 밀리초입니다. 로그인 유지 체크 값은 클라이언트가 보내더라도, 계정의 위험도·기기 신뢰도·조직 정책에 따라 서버가 최대 수명을 제한해야 합니다.
로그아웃은 쿠키와 서버 세션을 함께 지운다
typescript
router.post("/logout", (req, res, next) => {
return req.session.destroy(error => {
if (error) return next(error);
res.clearCookie("sid");
return res.status(204).end();
});
});브라우저 쿠키만 지우면 서버 저장소의 세션은 남을 수 있습니다. 비밀번호 변경, 계정 비활성화, 의심스러운 로그인 대응에서도 해당 사용자의 활성 세션을 폐기하는 정책을 마련하세요.
점검 목록
운영 환경은 HTTPS와 secure cookie를 사용한다.
세션 ID는 로그인 성공 시 재발급한다.
만료·로그아웃·비밀번호 변경 시 서버 저장소의 세션도 제거한다.