세션 관리용 미들웨어 입니다.
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
요청이 올 때 세션에 수정 사항이 생기지 않아도
세션을 다시 저장할지 설정하는 것
(수정사항의 예는 뭘까..)
세션에 저장할 내역이 없더라도
처음부터 세션을 생성할지 설정하는 것
(세션에 저장할 내역은 뭐가 있을까..)
안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 합니다.
쿠키를 서명하는데 필요한
secret값을 넣을 수 있는 옵션 입니다.
보안이 중요한 정보여서 환경변수로 작성 권장.
세션 쿠키의 이름은 name 옵션으로 설정
기본 이름은 connect.sid 입니다.
세션쿠키 에 대한 설정
maxAge, domain, path, expires, sameSite, httpOnly, secure 등
일반적인 쿠키 옵션이 모두 제공됩니다.
true : 클라이언트에서 쿠키를 확인하지 못함 (쿠키 탈취 공격(XSS) 방지)
true : https 인 환경에서만 사용가능
false : https가 아닌 환경에서도 사용 가능
배포시 : https를 적용하고 true로 설정하길 권장
세션을 저장할 곳을 설정 합니다.
기본적으로 세션은 메모리에 저장됩니다.
문제 :
서버를 재시작하면
메모리가 초기화되서 세션이 모두 사라짐
해결책 :
배포 시 store에 데이터베이스를 연결하여
세션을 유지하는 방법이 있고
보통 레디스가 자주 쓰입니다.
express-session으로 만들어진 객체로
값을 대입하거나 삭제해서 세션을 변경할 수 있습니다.
req.session.name = 'sunrise';
req.sessionID
현재 세션의 아이디를 확인하는 메소드
req.session.destroy
나중에 세션을 한 번에 삭제하는 메소드
req.session.save
세션을 강제로 저장하기 위한 메소드
일반적으로 요청이 끝날 때 자동으로 호출되므로
직접 save 메서드를 호출할 일은 거의 없습니다.
쿠키 앞에 s:이 붙습니다.
s:는 encodeURIComponent 함수가 실행되어 s%3A가 됩니다.
s%3A의 뒷부분이 실제 암호화된 쿠키 내용입니다.
쿠키 앞에 s%3A가 붙은 경우,
express-session 미들웨어에 의해
암호화된 것이라고 생각하면 됩니다.