[TIL] express-session

sunriseGong·2021년 10월 28일
0

express-session 의 역할은?

세션 관리용 미들웨어 입니다.

세션 관리의 예

  • 로그인 등의 이유로 세션을 구현
  • 특정 사용자를 위한 데이터를 임시적으로 저장

사용예시

app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
  name: 'session-cookie',
}));

option 을 살펴봅시다

resave

요청이 올 때 세션에 수정 사항이 생기지 않아도
세션을 다시 저장할지 설정하는 것

(수정사항의 예는 뭘까..)

saveUninitialized

세션에 저장할 내역이 없더라도
처음부터 세션을 생성할지 설정하는 것

(세션에 저장할 내역은 뭐가 있을까..)

secret

안전하게 쿠키를 전송하려면 쿠키에 서명을 추가해야 합니다.

쿠키를 서명하는데 필요한
secret값을 넣을 수 있는 옵션 입니다.

보안이 중요한 정보여서 환경변수로 작성 권장.

name

세션 쿠키의 이름은 name 옵션으로 설정
기본 이름은 connect.sid 입니다.

세션쿠키 에 대한 설정
maxAge, domain, path, expires, sameSite, httpOnly, secure 등
일반적인 쿠키 옵션이 모두 제공됩니다.

cookie[httpOnly]

true : 클라이언트에서 쿠키를 확인하지 못함 (쿠키 탈취 공격(XSS) 방지)

cookie[secure]

true : https 인 환경에서만 사용가능
false : https가 아닌 환경에서도 사용 가능

배포시 : https를 적용하고 true로 설정하길 권장

store

세션을 저장할 곳을 설정 합니다.
기본적으로 세션은 메모리에 저장됩니다.

문제 :
서버를 재시작하면
메모리가 초기화되서 세션이 모두 사라짐

해결책 :
배포 시 store에 데이터베이스를 연결하여
세션을 유지하는 방법이 있고
보통 레디스가 자주 쓰입니다.


req.session 객체는 어떻게 사용되나요?

req.session

express-session으로 만들어진 객체로
값을 대입하거나 삭제해서 세션을 변경할 수 있습니다.

세션등록

req.session.name = 'sunrise';

세션아이디확인

req.sessionID
현재 세션의 아이디를 확인하는 메소드

세션삭제

req.session.destroy
나중에 세션을 한 번에 삭제하는 메소드

세션 강제 저장

req.session.save
세션을 강제로 저장하기 위한 메소드
일반적으로 요청이 끝날 때 자동으로 호출되므로
직접 save 메서드를 호출할 일은 거의 없습니다.


express-session에서 서명한 쿠키의 특징이 있나요?

쿠키 앞에 s:이 붙습니다.
s:는 encodeURIComponent 함수가 실행되어 s%3A가 됩니다.

s%3A의 뒷부분이 실제 암호화된 쿠키 내용입니다.

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


출처 : https://thebook.io/080229/ch06/02/05/

profile
심심해야 공부하게 된다.

0개의 댓글