[WEB] Cookie, Session

DyungE_100·2022년 4월 6일
0

WEB

목록 보기
6/9

0. HTTP의 특징

HTTP의 StatlessConnectionless 특징으로 인해 불필요한 정보 유지가 없다는 것이 장점이 될 수도 있지만, 대부분의 경우 Stateful 상태가 필요한 상황이 많이 있다.
따라서 이러한 약점을 보완하기 위해 쿠키 또는 세션을 사용한다.

1. 용어의 정의

1.1 쿠키(Cookie)

쿠키인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저에 저장되는 작은 텍스트 파일을 말한다. 웹 브라우저는 파일을 저장해놨다가, 동일한 서버에 재요청을 할 때 저장했던 데이터를 함께 전송한다.
주로 쿠키를 보낼 때 세션이 포함되어 들어가지만 아닌 경우도 존재한다.

쿠키의 목적은 주로 세 가지다.

  • 세션 관리(Session Management) : 서버에 저장해야 할 로그인, 장바구니 등의 정보 관리.
  • 개인화(Personalization) : 사용자 선호도, 테마 등의 세팅.
  • 트래킹(Tracking) : 사용자 행동을 기록하고 분석하는 용도. -> 광고나 데이터로써 활용함.

1.2 세션(Session)

세션도 임시적으로 저장하는 파일은 맞지만, 웹 브라우저가 아닌 웹 서버에 저장된다. 브라우저가 종료될 때까지 유지가 되며, 주로 유출되면 안되는 중요한 데이터가 저장된다.


2. 쿠키, 세션 특징 및 차이점

2.1 쿠키의 특징

  • 웹 브라우저에는 총 300개까지 저장이 가능하며, 하나의 도메인당 20개의 값만 가질 수 있다. 쿠키 하나당 최대 4KB까지 저장할 수 있다.

  • 쿠키는 사용자 인증의 만료일 혹은 지속기간을 설정할 수 있다. 만료된 쿠키는 더는 보내지지 않는다.

  • HTTP 요청을 수신할 때, 서버는 응답과 함께 Set-Cookie 헤더를 전송할 수 있다. 브라우저에 쿠키가 저장되면, 그 후 같은 서버에 보내는 요청들의 HTTP 헤더 안에 포함되어 전송된다.

  • 쿠키의 구성 요소
    Set-Cookie: <cookie-name>=<cookie-value>...

    • 이름 : 각각의 쿠키를 구별하는데 사용되는 이름
    • 값 : 쿠키의 이름과 관련된 값
    • 유효 시간 : 쿠키의 유지 시간
    • 도메인 : 전송할 도메인
    • 경로 : 전송할 요청 경로
  • 쿠키의 동작 방식
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

[page content]
  1. 클라이언트가 요청을 보내면 서버에선 쿠키를 생서어한다.

  2. 위의 응답처럼 HTTP Response 헤더에 쿠키를 포함시켜 보낸다.

  3. 브라우저가 종료되어도 쿠키 만료 기간이 남아있으면 클라이언트 측에서 보관하고 있는다.

GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
  1. 같은 서버에 요청을 할 때, 클라이언트는 HTTP Request 헤더에 저장했던 쿠키를 함께 보낸다.

  2. 서버에서 쿠키를 읽어 이전 상태 정보를 변경해야 할 필요가 있으면 쿠키를 업데이트하여 변경된 쿠키를 HTTP Response 헤더에 포함시켜 다시 응답한다.

  • 쿠키의 라이프타임(Lifetime)
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

쿠키는 만료기간을 지정해주지 않으면 세션이 끝날 때 (브라우저 창이 닫힐 때) 삭제된다.
쿠키의 라이프타임은 두 가지 방법으로 정의할 수 있다.

    1. 세션(Session) 쿠키 : 세션이 끝날 때 삭제되는 쿠키다. 대신 어떤 브라우저들은 재시작할 때 세션을 복원해 세션 쿠키가 무기한 존재할 수 있도록 한다.
    1. 지속적(Persistent) 쿠키 : Expires 속성에 명시된 날짜에 삭제되거나, Max-Age 속성에 명시된 기간 이후에 삭제된다.




0개의 댓글