쿠키는 클라이언트에 정보를 저장하는 방식이고
세션은 데이터를 서버에 저장하고 쿠키에는 데이터에 대한 아이디만 암호화된 상태로 부여한다
세션도 결국에는 쿠키에 유저정보를 담아 주는데 그냥 쿠키와 어떤 방법이 다른지 알아보자 !
세션으로 유저정보와 장바구니 정보를 저장하려고 할 때
설명 | 접속 상태 저장 경로 | 장점 | 단점 | |
---|---|---|---|---|
쿠키 | http의 무상태성을 보완해주는 도구 | 클라이언트 | 서버의 부담을 덜어준다 | 쿠키 자체는 인증이 아니다 |
세션 | 접속 상태를 서버가 가진다 접속 상태와 권한 부여를 위해서 세션 아이디를 쿠키로 전송한다 | 서버 | 신뢰할 수 있는 유저인지 서버에서 추가 확인이 가능하다 | 한 서버에서만 접속상태를 가지기 때문에 분산에 불리하다 |
세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있고 서버는 세션을 저장하고 있다
서버는 그저 세션 아이디로만 요청을 판단한다
로그아웃에는 두 가지 작업이 필요하다
- 서버의 세션 정보를 삭제
- 클라이언트의 쿠키를 갱신
서버가 클라이언트의 쿠키를 임의로 삭제할 수는 없으므로
set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신해야한다
세션을 대신 관리해 주는 'express-session' 모듈
'express-session'은 세션을 위한 미들웨어로, 'Express'에서 세션을 다룰 수 있는 공간을 쉽게 만들어주고
세션 아이디를 쿠키에 저장하고, 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장한다
이때 세션 객체는 서로 독립적인 객체이므로 각각 다른 데이터를 저장할 수 있다
req.session이 세션 객체,
req.session은 세션 객체에 세션 데이터를 저장하거나 불러오기 위해 사용한다
세션 객체에 값을 담거나, 값을 불러오는 법, 세션을 파괴하는 법은 GitHub 참고
GitHub: express-session