Cookie와 Session이란?

99winnmin·2022년 7월 28일
0

CS

목록 보기
1/1

쿠키와 세션 사용하는 이유 

HTTP프로토콜의 특징이자 약점을 보완하기 위해 사용한다.
먼저 http프로토콜의 특징이자 약점을 살펴보자.

  1. Connectionless. Protocol 비연결지향
    클라이언트가 서버에 요청했을때, 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리방식.

  2. Stateless Protocol (상태정보 유지안함) 
    클라이언트의 상태정보를 가지지 않는 서버처리방식.
    클라이언트와 첫번째 통신에서 데이터를 주고받았다 해도, 두번째 통신에서 이전데이터를 유지하지 않는다.

BUT, 실제로는 데이터유지가 필요한 경우가 많다.
정보가 유지되지 않으면 매번 페이지 이동시 마다 로그인을 해야하거나 장바구니에서 상품을 선택했는데 구매페이지에서 상품의 정보가 사라지거나 하는 경우가 발생할 것이다.
이 때문에 Stateful 경우를 대처하기 위해서 쿠키와 세션을 사용한다.

서버와 클라이언트 통신 시 통신이 연속적으로 이어지지 않고 한번 통신 후 끊어지게 된다. 따라서 서버는 클라이언트가 누구인지 계속 인증을 해야하는데 이는 매우 귀찮고 번거로운 일이기도 하고 웹페이지의 로딩을 느리게한다. 이러한 문제점을 해결하는 방법이 쿠키와 세션이다. 

즉, 클라이언트와 서버 통신시 정보를 유지하기 위해 사용하는 것이 쿠키와 세션이다.

Cookie란?

http의 일종으로 웹사이트 방문시, 그 사이트가 사용하고 있는 서버에서
사용자의 클라이언트에 저장하는 기록데이터파일이다.
http에서 클라이언트의 상태정보를 클라이언트에 저장해두었다가 필요시 정보를 참조, 재사용 한다.

쿠키 특징

  • 이름, 값, 만료일, 경로정보 로 구성됨.
  • 클라이언트에 총 300개의 쿠키 저장 가능.
  • 하나의 도메인당 20개의 쿠키를 가질 수 있다
  • 하나의 쿠키는 4 kb까지 저장 가능

쿠키 동작순서

  1. 클라이언트 요청 (사용자가 웹사이트 접근) 
  2. 웹서버는 쿠키생성
  3. 생성한 쿠키에 정보를 담아 http화면을 돌려줄때 같이 클라이언트에게 넘긴다.
  4. 넘겨받은 쿠키는 클라이언트가 가지고 있다가 다시 서버에 요청 시, 쿠키를 함께 전송.
  5. 동일 사이트 재방문시 클라이언트 pc에 해당쿠키가 있는경우, 요청페이지와 함께 쿠키 전송. 

예시 : 인터넷쇼핑장바구니, 재방문시 아이디/비번 자동입력, 오늘 이창을 다시보지않기 설정 등등 . . 

Session이란?

  • 일정 시간동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
  • 또한 여기서 일정 시간이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점을 말함
  • 즉, 방문자가 웹서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라고 칭한다는 것.

세션 특징

  • 웹서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장 
  • 웹서버에 저장되는 쿠키 (=세션쿠키)
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때 삭제되므로, 쿠키보다 보안이 좋다.
  • 저장데이터에 제한이 없다.
  • 각 클라이언트의 고유세션ID를 부여한다.
  • 세션ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스를 제공한다.

세션 동작순서 

  1. 클라이언트 요청 (사용자가 웹사이트 접근) 
  2. 서버는 접근클라이언트의  Request-Header필드인 cookie를 확인하여, 클라이언트가 해당 세션ID를 보냈는지 확인
  3. 세션ID가 존재하지 않는다면, 서버는 세션ID를 생성해 클라이언트에게 전송.
  4. 서버에서 클라이언트로 준 세션ID를 쿠키를 사용해 서버에 저장한다. 
  5. 클라이언트는 재접속시, 이 쿠키를 이용하여 세션ID값을 서버에 전달한다.
  6. 클라이언트가 일정 시간 웹서버를 이용하지 않으면 세션은 자동 소멸된다.

예시 : 화면이동해도 로그인이 풀리지 않고 로그아웃전까지 유지, 세션을 체크하여 관리자/사용자 여부 판단 등등 .. 

💥하지만 취약점은 존재한다. 공격자가 중간에 사용자가 정상적으로 생성한 세션ID를 중간에 가로채서 사용한다면, 서버는 공격자를 사용자로 인식하여 웹서버에 접근 및 사용자의 정보를 갈취할 수 있다. 이런 공격을 HTTP Session Hijacking이라고 한다.

쿠키와 세션차이

Then, 어떤경우에 쿠키를 사용할까? 

세션이 쿠키에 비해 보안이 높지만 쿠키를 사용하는 이유는 세션은 서버에 저장되어
서버자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 상당하다.
이러한 자원관리 차언에서 쿠키와 세션을 적절히 병행사용하여 서버지원의 낭비를 줄이고
웹사이트의 속도를 높일 수 있다.

profile
功在不舍

0개의 댓글