SESSION

beablessing·2021년 8월 3일
0

server

목록 보기
6/8
post-thumbnail

세션

  • 서버에서 관리한다. (쿠키는 브라우저에 저장)
  • 따라서 ct구분을 위해 세션ID를 부여
  • 브라우저가 종료되면 정보 날라감
  • 유저정보가 서버에 있어 안전하지만, 메모리가 힘들다.
  • 비교적 느림

세션ID

  • 클라이언트가 req를 보내면 , 서버가 ct에게 유일한 ID를 보내준다.
    유일한 ID가 세션ID
    출처 https://whwl.tistory.com/156

    동작방식
    1.클라이언트가 서버에 정보와 함께 어떤 req를 보낸다
    2.서버는 db에 정보를 저장한다. .
    3.세션저장소에서 세션id를 생성하여 서버에 보낸다.
    4.서버가응답+세션id를 클라이언트에게 보낸다.(쿠키를 사용하여 저장?)
    5.쿠키를 통해 세션id로 서버에 어떤2 req를 보낸다
    6.서버는 db에서 세션id를 체킹하고 일을 수행한다.
    7.이때 세션id가 서버에서 유효한지 체킹이 되었다면, 서버는 요청에 접근이 가능하다고 판단함 (일 완료가 가능하다)
    8.서버는 ct에게 성공적인 data로 응답한다.

쿠키와 세션의 차이점

  • 사용자의 정보가 저장되는 위치
    쿠키는 client / 세션은 server에 보관.
  • 보안
    로컬에 저장되는 쿠키는 보안에 취약하지만, 세션은 쿠키를 이용해 세션 ID만 저장하고 구분/처리는 서버에서 하므로, 보안성이 좋음.
  • 라이프 사이클
    쿠키도 만료시간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 정보가 남을 수 있지만,세션은 브라우저가 종료되면 삭제.
  • 속도
    세션은 정보가 서버에 있기 때문에 비교적 느림.

세션사용하기

  • 세션id가 담긴 쿠키의 위치 :: 클라이언트
  • 세션을 저장하고 있는 곳 :: 서버
  • 서버는 세션id로만 요청을 판단한다. (따라서 탈취되더라도, 서버는 ok응답)

로그아웃 구현하기

해야할일 2가지
1.서버에 있는 세션정보를 삭제한다.
2.클라이언트의 쿠키를 갱신한다.

express-session

'express-session'은 세션을 위한 미들웨어로, 'Express'에서 세션을 다룰 수 있는 공간을 보다 쉽게 만들어줌

  • 세션 아이디를 쿠키에 저장하고,
  • 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장합니다.
  • 이때 세션 객체는 서로 독립적인 객체이므로 각각 다른 데이터를 저장할 수 있습니다.

req.session : 세션객체에 세션데이터를 저장하거나 불러올때 사용함

  • 세션객체에 데이터(userId값)를 저장해주는 코드 req.session.save
req.session.save( () => {
        req.session.userId = userInfo.userId;
        res.status(200).json({ data: userInfo, message: 'ok' });

})
  • 로그인이 되어있는경우, 로그아웃요청 req.session.destroy()
 req.session.destroy((err)=>{
        if(err){
          throw err;
        } else {
          res.status(200).send();
        }
});
  • 여담으로, 마이페이지를 구현할시에는 ->
    logout핸들러함수도 구현해주어야한다.
    (axios.post('엔드포인트_로그아웃페이지')로 요청을 보내서 성공시 logout핸들러함수 호출! )

쿠키와 세션의 문제점

  • 쿠키
    ct쪽에 보관되기 때문에 보안성이 떨어짐
  • 세션
    서버에 보관되어 보안성이 좋지만,
    사용자 수만큼 서버메모리를 차지함

==> 개선방법은 토큰 기반의 jwt

다음이야기 > JWT

profile
프론트엔드 개발자

0개의 댓글