Cookie와 Session 학습

쿠키 특징

  • 클라이언트 로컬(하드)에 저장되는 키와 값이 들어있는 작은 데이터 파일
  • 클라이언트 상태 정보를 로컬에 저장했다가 참조
  • 중요하지 않은 데이터를 저장할 때 주로 사용
  • 이름, 값, 만료날짜(쿠키 저장시간), 경로 정보 포함
  • 일정시간동안 데이터 저장 가능(로그인 상태 유지에 활용)
  • 하나의 쿠키 당 4KB 이하 저장 가능
  • 한 도메인 당 20개 저장 가능(총 300개)
    • 하나의 도메인에서 설정한 쿠키값이 20개를 초과하면 가장 적게 사용된 쿠키부터 삭제

쿠키 동작 방식

  1. 클라이언트가 페이지 요청
  2. 서버에서 쿠키 생성
  3. HTTP 헤더에 쿠키 포함시켜 응답
  4. 브라우저 종료되어도 쿠키 만료시간 있다면 클라이언트가 보관하고 있음
  5. 클라이언트가 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 서버에 전송
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

쿠키 사용 예

  • 이벤트 팝업 창(오늘 다시 보지 않음)
  • 쇼핑몰 장바구니 기능

세션(Session)

세션 특징

  • 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리
  • 일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
  • 웹 브라우저를 통해 웹 서버 접속하여 브라우저를 종료할 때 까지 유지되는 상태
  • 클라이언트가 request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 세션ID 부여
  • 중요한 데이터를 저장할 때 주로 사용
  • 사용자에 대한 정보를 서버에 두어 쿠키에 비해 보완에 강하나, 사용자가 많아질수록 많은 서버 메모리 차지
  • 동접자 수가 많은 웹 사이트의 경우 서버에 과부하를 주게 되어 성능 저하 우려
  • 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량에 제한 없음

세션 동작 방식

  1. 클라이언트가 서버 접속 시, 세션 ID 발급
  2. 클라이언트는 세션 ID에 대해 쿠키 사용하여 Header에 저장
  3. 클라이언트가 서버에 다시 접속 시 이 쿠키를 이용하여 세션 ID 값을 서버에 전달
  4. 세션 ID가 없다면, 서버는 세션 ID 생성하여 클라이언트에게 전송

세션 사용 예

  • 화면이 이동해도 로그인이 해제되지 않고 로그아웃 하기 전까지 유지되고 있는 것

3. 쿠키와 세션의 차이

  • 가장 큰 차이점은 사용자의 기록 정보가 저장되는 위치
  • 보안 면에서 세션이 우수
    • 쿠키는 클라이언트 로컬에 저장되므로 변질되거나 request에서 스나이핑 당할 가능성 높음
    • 세션은 쿠키를 이용하여 sessionid만 저장하고, 서버에서 처리하므로 비교적 보안성 높음
  • 요청 속도 면에서 쿠키가 우수
    • 쿠키는 서버의 자원을 전혀 사용하지 않으나, 세션은 서버의 자원 사용
  • 참고) 캐시는 이미지나 css, js파일 등이 사용자의 브라우저에 저장이 되는 것
    • 그 후 다시 같은 사이트 접속 시, css, js, 이미지 파일을 서버가 아닌 사용자의 PC에서 가져옴