더북(TheBook)

cookie 옵션은 세션 쿠키에 대한 설정입니다. maxAge, domain, path, expires, sameSite, httpOnly, secure 등 일반적인 쿠키 옵션이 모두 제공됩니다. 현재 httpOnlytrue로 설정해 클라이언트에서 쿠키를 확인하지 못하도록 했고, securefalse로 해서 https가 아닌 환경에서도 사용할 수 있게 했습니다. 배포 시에는 https를 적용하고 securetrue로 설정하는 것이 좋습니다.

예제 코드에는 나와 있지 않지만, store라는 옵션도 있습니다. 현재는 메모리에 세션을 저장하도록 되어 있습니다. 문제는 서버를 재시작하면 메모리가 초기화되어 세션이 모두 사라진다는 것입니다. 따라서 배포 시에는 store에 데이터베이스를 연결해 세션을 유지하는 것이 좋습니다. 보통 레디스가 자주 쓰입니다. 레디스의 사용 방법은 15.1.8절에서 설명합니다.

req.session.name = 'zerocho'; // 세션 등록
req.sessionID; // 세션 아이디 확인
req.session.destroy(); // 세션 모두 제거

express-session으로 만들어진 req.session 객체에 값을 대입하거나 삭제해서 세션을 변경할 수 있습니다. 나중에 세션을 한 번에 삭제하려면 req.session.destroy 메서드를 호출하면 됩니다. 현재 세션의 아이디는 req.sessionID(또는 req.session.id)로 확인할 수 있습니다. 세션을 강제로 저장하기 위해 req.session.save 메서드가 존재하지만, 일반적으로 요청이 끝날 때 자동으로 호출되므로 직접 save 메서드를 호출할 일은 거의 없습니다.

실제 로그인은 9.3절에서 하지만, 세션 쿠키의 모양이 조금 독특하니 미리 알아두면 좋습니다. express-session에서 서명한 쿠키 앞에는 s:이 붙습니다. 실제로는 encodeURIComponent 함수가 실행되어 s%3A가 됩니다.

▲ 그림 6-5 s%3A로 시작하는 세션 쿠키

s%3A의 뒷부분이 실제 암호화된 쿠키 내용입니다. 앞에 s%3A가 붙은 경우, 이 쿠키가 express-session 미들웨어에 의해 암호화된 것이라고 생각하면 됩니다.

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