(펌)개념 정리

쿠키, 세션, 웹스토리지의 차이점

ble194 2022. 11. 1. 17:38

HTTP 프로토콜의 한계를 보안하기 위해 쿠키, 세션을 사용한다.

HTTP 프로토콜 환경은 비연결지향(connectionless) , 무상태(stateless)한 특성을 가져서 요청만으론 서버가 클라이언트를 구별할 수 없다.

🎈비연결성(connectionless)

  • HTTP는 먼저 클라가 요청을 서버로 보내면, 서버는 클라에 맞는 응답을 보내고 TCP/IP연결을 끊는다.
  • HTTP 1.1에선 헤더에 keep-alive라는 값을 줘서 커넥션을 재활용한다.

😶무상태(stateless)

  • 연결을 끊는 순간 클라와 서버의 통신이 끝나며 상태 정보를 유지하지 않는 특성이다.

🍘쿠키(Cookie)

  • 클라이언트에 저장되는 키와 같이 들어있는 작은 파일
  • 클라이언트의 상태 정보를 로컬에 저장했다가 참조
  • 클라이언트에 300개까지 쿠키 저장 가능, 하나의 도메인당 20개의 값만 가질 수 있음
  • 하나의 쿠키값은 4kb까지 저장 가능
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request 시에 Request Header를 넣어 자동으로 서버에 전송한다.

쿠키의 목적?

  • 세션 관리 : 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리
  • 사용자 맞춤 : 사용자가 선호하는 옵션이나 테마 등의 세팅
  • 사용자 추적 : 사용자의 행동을 기록하고 분석하는 용도

쿠키의 스코프

  • 클라이언트가 종료되면 날아가는 휘발성 쿠키인 Session Cookie
  • 클라이언트가 종료되어도 일정 기간 유지되는 Permanent Cookie

Permanent Cookie Expires(날짜, 시간 ) 혹은 Max-Age(초)를 명시해 해당 날짜, 시간까지 쿠키 유지할 수 있고 암것도 설정하기 않으면 Session Cookie가 된다.

🎫세션(Session)

  • 사용자 정보를 파일 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
  • 서버에서 클라이언트를 구분하기 위해 세션 ID를 부여하고, 브라우저가 서버에 접속해 종료할 때까지 인증상태를 유지한다.
  • 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정하는 것이 가능하다.
  • 데이터를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질 수록 서버 메모리를 차지하게 된다.

세션 보충 설명

  • 클라이언트가 Request보내면 Response Set-Cookie를 통해 클라의 유일한 ID값을 생성해 부여하고, 이를 통해 사용자 정보는 안전한 서버에 존재하며 클라이언트와 서버 간에는 ID값만을 전달해 보안 위협을 감소시켜 준다.
  • 클라이언트에 저장되는 쿠키는 세션 종료 시 함께 소멸되는 "Memory Cookie" 탕비을 가져 브라우저가 종료되면 세션과 관련된 쿠키도 삭제 된다.

🤔쿠키와 세션의 비교

  • 데이터 저장위치
    • 쿠키 : 클라이언트 세션 : 서버
  • 보안
    • 쿠키 : 저장위치 때문에 스니핑 당할 우려 존재 - 세션 : 쿠키 이용해 세션 아이디만 저장하고 서버에서 처리하기 때문에 보안성은 쿠키 < 세션
  • 라이프 사이클
    • 쿠키 : 브라우저 종료해도 만료기간 남아있으면 존재, - 세션 : 브라우저 종료 시 만료기간에 상관없이 종료
  • 속도 : 쿠키 > 세션

🎞웹 스토리지(Web Stroage)

  • **클라이언트에 데이터를 저장할 수 있도록 HTML5 부터 추가된 저장소
  • 간단한 Key-value 스토리지 형태
  • 쿠키와 달리 자동 전송의 위험성이 없다.
  • 오리진 (Origin) (도메인, 프로토콜, 포트 ) 단위로 접근이 제한되는 특성 덕분에 CSRF로부터 안전
    (사이트간 요청 위조 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격방법을 의미)
  • 쿠키보다 큰 저장 용량 지원 (모바일 2.5MB, 데스트탑 5~10 MB)
  • 서버가 HTTP 헤더를 통해 스토리지 객체를 조작할 수 없음 ( 웹 스토리지 객체 조작은 자바스크립트 내에서만 수행가능)
  • 오직 **문자형(STRING)데이터 타입만 지원
  • **로켈 스토리지(Local Storage)와 세션 스토리지 (Session Storage)가 있고, 같은 스토리지 객체를 상속하기 때문에 메서드 가 동일함

🧧로컬 스토리지(LocalStorage)

  • 사용자가 데이터를 지우지 않는 이상, 브라우저나 OS를 종료해도 계속 브라우저에 남아있음 ( 영구성 )
  • 브라우저 종료해도 데이터 유지
  • 단, 동일한 브라우저를 사용할 때만 해당
  • 도메인 다른 경우 로컬 스토리지 접근 불가
  • 지속적으로 필요한 데이터 저장(자동 로그인 등 )

👓세션 스토리지(sessionStorage)

  • 데이터가 오리진 뿐 아니라 브라우저 탭에도 종속되어 있어 윈도우나 브라우저 탭을 닫을 경우 제거
  • 일시적으로 필요한 데이터 저장 (일회성 로그인 정보, 입력폼 저장 , 등 )
  • 각 세션마다 데이터가 개별적으로 저장
  • 세션을 종료하면 데이터가 자동 삭제
  • 같은 도메인이라도 세션 다르면 접근 불가

출처 - https://developstudydiary.tistory.com/131