express-session
✒️ 2025-05-26 14:07 내용 수정
Node.js 교과서 개정 3판 내용 정리
- 세션을 관리할 때 사용하는 미들웨어다.
- 세션에 대한 설명은 Java로 세션 생성하기 참고.
- 로그인이나 특정 사용자의 데이터를 임시 저장할 때 사용한다.
- 세션은 사용자별로 req.session 객체 안에 유지된다.
- express-session을 사용하려면 VSC 터미널에서 먼저 다운 받아야 한다.
npm i express-session
-
sever.js에서 session 설정을 작성한다.
-
쿠키 설정은
cookie-parser에서 설정하는 것과 거의 비슷하다.- cookie-parser 참고.
-
세션을 DB에 저장한다면 DB 세션 관련 미들웨어도 설치해야 한다.
- 아래는 MySQL에 저장하기 위한 미들웨어다.
npm i express-mysql-session
| 옵션 | 설명 |
|---|---|
| secret | 쿠키 서명에 필요한 값, 최대한 길고 복잡하게 설정 |
.env 파일에 secret을 설정해서 process.env.COOKIE_SECRET으로 가져와서 설정할 수 있음 |
|
| resave | 요청이 올 때 세션에 수정 사항이 없어도 세션을 다시 생성할지 설정 |
| saveUninitialized | 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할건지 설정 |
| cookie | 세션 쿠키에 대한 설정. 옵션은 cookie-parser에서 설정하는 옵션과 동일함 |
| store | 세션 저장위치. 기본 설정은 메모리에 세션을 저장하도록 되어 있기 때문에 서버 재시작 시 메모리 초기화로 인해 세션이 사라짐 |
| 배포 시에는 store를 DB에 연결하여 세션을 유지하도록 설정해야 함 |
const session = require('express-session') // express-session은 먼저 다운 받아야 한다
app.use(session({ // 세션을 사용하기 위한 옵션 설정
secret: '1234567890!@#$%^&*()', // 쿠키 서명에 필요한 값
resave : false, // 요청이 올 때 수정 사항이 없어도 세션을 다시 생성할지 설정
saveUninitialized : false, // 세션에 저장할 내역이 없더라도 처음부터 세션을 생성할건지 설정
cookie : { // 세션의 쿠키 설정
httpOnly : true, // 클라이언트에서 쿠키 확인 여부 설정
maxAge : 60000 * 1000
}, // 1s = 1000ms (쿠키 저장시간 설정) = 1시간
store : new MySQLStore( dbOption ), // 세션 저장위치, 예시는 MySQL
}))
- req.session 객체에서 사용할 수 있는 세션 관련 property 및 메소드
req.session.name = 'sessionName'; // 세션 등록
req.sessionID; // 현재 세션 ID 확인
req.session.destroy(); // 세션을 모두 제거
express-session에서 서명된 쿠키의 경우 앞에s:, encodeURIComponent 함수를 거치면s%3A가 붙는다.- 쿠키의 이름은 팀 프로젝트에서 진행하면서 따로 지정한 이름이 있어서 기본값이 아닌 이름으로 뜬다.
- 쿠키(Cookie) 참고.
세션 정보 확인
- 서로 다른 브라우저에서 한 서버에 접속했을 때 session 객체와
req.user정보가 다르게 저장되는지 확인해봤다.req.user는passport를 사용하면 매 요청마다 사용자가 지정한 데이터를 넣어둘 수 있다.- passport를 사용한 로그인과 세션 참고.
// router 파일
router.get("/getLoginUser", (req, res)=>{
console.log(req.user);
console.log(req.session);
console.log(req.sessionID);
});
- 구분선을 기준으로 위와 아래의 세션 정보가 서로 다른 것을 확인할 수 있다.