Cookie / Session

yezo cha·2021년 8월 5일
0

HTTP/network

목록 보기
7/7
post-custom-banner

HTTP의 Stateless

쿠키와 세션이 필요한 이유를 알아보기 위해 HTTP를 먼저 보자.

HTTP는 서버와 클라이언트 사이에서 요청(Request) / 응답(Response)이 이루어지는 프로토콜이다.
요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없다.
이를 Stateless 라고 한다.

Cookie

서버가 일방적으로 사용자의 웹 브라우저에 전송하는 작은 데이터 조각.
서버가 HTTP 응답 헤더(header)의 Set-Cookie에 내용을 넣어 전달하면, 브라우저는 이 내용을 자체적으로 저장한다.
이게 바로 쿠키다 !
쿠키는 Key-Value 형식의 문자열이다.

브라우저는 사용자가 쿠키를 생성하도록 한 동일 서버(사이트)에 접속할 때마다 쿠키의 내용을 Cookie 요청 헤더에 넣어서 함께 전달한다.

쿠키의 유효기간은 서버에서 설정해 보낼 수 있다.
유효기간이 지나면 쿠키는 자동적으로 소멸된다.
만약 유효기간을 설정하지 않는다면 브라우저를 종료하는 순간 사라진다.

쿠키는 클라이언트 식별과 같은 인증에 가장 많이 쓰인다.

구성 요소

  • Name
  • Value
  • Domain
    • 쿠키를 전송할 도메인.
  • Path
    • 쿠키를 반환할 경로.
  • Expires
  • Secure
    • 보안 연결 여부
  • Samesite
    • Cross-Origin 요청을 받은 경우 요청에서 사용한 메서드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정한다.
  • HttpOnly
    • JS에서 브라우저의 쿠키에 접근 여부를 결정한다.
      • 기본 false : 쿠키에 접근 가능. XSS 공격에 취약.
      • true : 쿠키에 접근 불가

동작 방식

  1. 브라우저가 서버에 요청(로그인)
  2. 서버는 클라이언트의 요청의 유효성을 확인하고 응답 헤더에 쿠키를 포함해서 응답. set-cookie: user=chayezo
  3. 클라이언트는 이후 서버에 요청할 때 전달받은 쿠키cookie: user=chayezo 를 자동으로 요청 헤더에 넣어서 전송.
    헤더에 쿠키 값을 자동으로 추가하는데 이는 브라우저에서 알아서 처리해준다.
  4. 서버에서는 쿠키 정보를 읽어 이전 상태 정보를 확인한 후 응답.

단점

  • 보안에 취약하다.
    • 요청 시 쿠키의 값을 그대로 보낸다.
    • 유출 및 조작 당할 위험이 있다.
  • 용량 제한이 있어 많은 정보를 담을 수 없다.
  • 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저 간 공유가 불가능하다.
  • 쿠키의 사이즈가 커질수록 네트워크에 부하가 심해진다.

쿠키의 단점을 보완하고자 세션(Session)을 사용한다.

Session

쿠키를 통해 클라이언트 로그인 상태를 유지시킬 수 있지만, 가장 큰 단점은 쿠키가 유출 및 조작 당할 위험이 있어 보안에 취약하다는 점이다.
개인정보를 HTTP로 주고 받는 것은 위험하다.

세션은 비밀번호 등 클라이언트의 인증 정보를 쿠키가 아닌 서버 측에 저장하고 관리한다.
브라우저를 통해 서버에 접속한 이후로 종료할 때까지 유지된다.
브라우저가 종료되면 만료시간에 상관없이 사라진다.

동작 방식

  1. 클라이언트가 서버에 요청.
  2. 서버는 클라이언트의 요청의 유효성을 확인하고, unique한 id를 sessionid라는 이름으로 저장.
  3. 서버가 응답할 때 응답 헤더에 SessionID를 포함해서 전송.
    쿠키에 SessionID를 sessionid라는 이름으로 저장.
    set-cookie: sessionid=a1s2djf를 추가하여 응답.
  4. 클라이언트는 이후 브라우저를 종료하기 까지 다음 요청 때 전달받은 sessionid=a1s2djf 쿠키를 자동으로 HTTP 헤더에 넣어서 전송.
  5. 서버에서는 요청 헤더의 sessionid값을 저장된 세션 저장소에서 확인하고 응답.

세션도 쿠키를 사용하여 값을 주고 받으며, 클라이언트의 상태 정보를 유지한다.
상태 정보를 유지하는 수단은 쿠키 !

쿠키와 세션의 차이점

저장 위치

  • 쿠키 : 클라이언트(로컬)
  • 세션 : 서버 + 로컬

보안

  • 쿠키 : 클라이언트에 저장되므로 보안에 취약
  • 세션 : 쿠키를 이용해 SessionID만 저장하고 이 값을 가지고 서버에서 처리하기 때문에 상대적으로 안전

LifeCycle

  • 쿠키 : 브라우저를 종료해도 만료시간에 따라 계속해서 파일로 남아 있을 수 있다.
  • 세션 : 브라우저가 종료되면 상관없이 삭제된다.
profile
(ง •̀_•́)ง
post-custom-banner

0개의 댓글