코드스테이츠 13주차 / [인증/보안] Session

support·2022년 2월 19일
0
post-thumbnail

Session이란?

쿠키는 클라이언트에 정보를 저장하는 방식이고
세션은 데이터를 서버에 저장하고 쿠키에는 데이터에 대한 아이디만 암호화된 상태로 부여한다

세션 전달 방법

세션도 결국에는 쿠키에 유저정보를 담아 주는데 그냥 쿠키와 어떤 방법이 다른지 알아보자 !

세션으로 유저정보와 장바구니 정보를 저장하려고 할 때

  1. 유저가 청바지를 장바구니에 넣어달라고 요청
  2. 서버에서는 db에 정보 저장 후
  3. 세션id 반환
  4. 보안이 취약한 쿠키에 세션id를 담아줘야 하기 때문에 암호화 하는 과정이 필요 / set-cookie 메소드를 사용해 쿠키에 담아서 클라이언트에 전송
  5. 유저가 장바구니에 셔츠를 하나 더 추가하고 싶다고 요청
    -> 이때 유저 김코딩은 세션id가 발급이 된 상태이기 때문에 세션id로 서버에 요청이 전달된다
  6. 서버에서 db에 있는 세션id가 맞는지 확인하고 장바구니를 업데이트 해준다
  7. 서버에서 클라이언트에게 장바구니에 업뎃이 완료됐다는 메세지를 전송 해준다

쿠키 VS 세션

설명접속 상태 저장 경로장점단점
쿠키http의 무상태성을 보완해주는 도구클라이언트서버의 부담을 덜어준다쿠키 자체는 인증이 아니다
세션접속 상태를 서버가 가진다 접속 상태와 권한 부여를 위해서 세션 아이디를 쿠키로 전송한다서버신뢰할 수 있는 유저인지 서버에서 추가 확인이 가능하다한 서버에서만 접속상태를 가지기 때문에 분산에 불리하다

로그아웃

세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있고 서버는 세션을 저장하고 있다
서버는 그저 세션 아이디로만 요청을 판단한다

로그아웃에는 두 가지 작업이 필요하다

  1. 서버의 세션 정보를 삭제
  2. 클라이언트의 쿠키를 갱신

서버가 클라이언트의 쿠키를 임의로 삭제할 수는 없으므로
set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신해야한다

express-session

세션을 대신 관리해 주는 'express-session' 모듈

'express-session'은 세션을 위한 미들웨어로, 'Express'에서 세션을 다룰 수 있는 공간을 쉽게 만들어주고
세션 아이디를 쿠키에 저장하고, 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장한다

이때 세션 객체는 서로 독립적인 객체이므로 각각 다른 데이터를 저장할 수 있다

req.session이 세션 객체,
req.session은 세션 객체에 세션 데이터를 저장하거나 불러오기 위해 사용한다

세션 객체에 값을 담거나, 값을 불러오는 법, 세션을 파괴하는 법은 GitHub 참고
GitHub: express-session

0개의 댓글