7. Cookie & Session란?

wjd15sheep·2024년 1월 9일
0

Web 기초

목록 보기
7/9

1. Cookie란?🍪

1.1 Cookie의 개념

쿠키는 웹 브라우저와 웹 서버 간의 상태를 유지하고 관리하기 위한 작은 데이터 조각이다.

  • 클라이언트(웹 브라우저)가 서버에 요청을 보낼 때, 서버는 해당 요청에 대한 응답과 함께 웹 브라우저에 작은 데이터 조각인 쿠키를 전송한다. 이 데이터는 웹 브라우저에 저장되어 있으며, 동일한 서버에 재 요청이 발생할 때 함께 전송된다. 이를 통해 HTTP의 기본적인 Stateless 속성을 극복하게 된다.

즉, 서버와 웹 브라우저 간의 연결을 유지하기 위한 식별 데이터로 활용된다.

주로 세 가지 목적을 위해 사용된다.

  • 세션 관리
    • 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리
  • 개인화
    • 사용자 선호, 테마 등의 세팅
  • 트래킹
    • 사용자 행동을 기록하고 분석하는 용도

Cookie 용어의 유래
쿠키는 웹서버가 웹 브라우저와 통신하는 과정에서 이용자 PC에 저장되는 크기가 작은 텍스트 파일로 마치 먹다 떨어뜨린 과자 부스러기(Cookie Crumbles)와 유사한 점에서 비롯되었다.

  • Cookie 들어가기 전 Statelessstateful(상태 유지, 무상태)을 알아야 한다.
    • Stateless : 무상태
      • 웹 서버가 클라이언트의 상태를 보존하지 않음을 의미
      • 클라이언트 요청이 서버에 전달되었을 때, 클라이언트의 다음 요청과 이어지지 않는 것
    • Stateful : 상태 유지
      • 웹 서버가 클라이언트의 상태를 보존함을 의미
      • 클라이언트 요청이 서버에 전달되었을 때, 클라이언트의 다음 요청이 이전 요청과 관계가 이어지는 것

1.2 Cookie는 어디에 저장되어 있는가?

Cookie(쿠키)는 웹 브라우저의 쿠키 스토리지에 저장되어 있다.
쿠키에는 이름, 값, Domain, Path, Expiers/Max-Age, Secure 등 정보가 포함되어 있다.

  • 확인하는 방법은 Chrome에 개발자 도구(Ctrl + Shift + I)에서 탭에 Application- Storage 부분에 Coockies를 선택하면 지금 브라우저에 쿠키가 무엇이 있는지 확인이 가능하다.
  1. 클라이언트가 웹 브라우저로 서버에 첫 요청을 보낸다.
  2. 서버는 클라이언트에 대한 상태 데이터(이름, 나이 등등)를 웹 브라우저로 보낸다.
  3. 웹 브라우저는 받은 상태 데이터를 저장하는 데 이를 Cookie라 한다.
  4. 클라이언트가 같은 서버에 두 번째 요청할 때 Cookie도 요청과 같이 서버로 보내진다.
  5. 서버는 Cookie를 통해 클라이언트가 누구인지 전에는 무슨 요청했는지를 알고 응답을 해준다.
  • Cookie 생성은 서버에 첫 요청 할때 서버에서 생성
  • Cookie 저장은 웹 브라우저에서 저장

2. Session 이란?

Session의 사전적 정의는 (특정한 활동을 위한)시간[기간]을 의미한다.
브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술로 서버에 클라이언트의 상태 정보를 저장하고 요청이 들어올 때마다 상태 데이터를 확인해 Stateful하게 한다.

Session은 열고 닫힘이 하나의 쌍으로 이루어진다.
(추성적 용어로 세가지 예시)

  • 로그인 세션 : 로그인한 뒤 -> 로그아웃하기까지
  • HTTP 세션 : TCP/UDP 연결 후 Request 전송 후 Response 받기까지
  • 브라우저 세션 : 하나의 탭/창이 열리고 닫히기까지

2.1 Session 저장 장소?

Session상태 데이터(이름, 나이 등등) 웹서버에 저장하는데, 저장 장소를 Session store라 한다.

  • Session StoreSession-ID를 저장하고 ID에 따른 상태 테이터 를 저장한다.
    클라이언트가 Session-ID를 쿠키로 보내오면 서버는 Session Store에서 ID를 찾아서 상태 데이터를 읽어 Stateful 상태를 유지한다.

2.2 Session일때 동작 과정

  1. 클라이언트가 웹 브라우저로 서버에 요청을 보낸다.
  2. 서버는 클라이언트에 대한 상태 데이터(이름, 나이 등등)서버에 저장 하고, Session-ID 를 생성해 웹 브라우저로 보낸다.
  3. 웹 브라우저는 받은 __Session-ID를 Cookie 에 저장 한다.
  4. 클라이언트가 같은 서버에 두 번째 요청할 때 Cookie 도 요청과 같이 서버로 전송된다.
  5. 서버는 Cookie를 통해 클라이언트가 누구인지, 이전에는 어떤 요청했는지를 알고, 이 정보를 기반으로 응답을 해준다.
  • 클라이언트 상태 데이터는 서버에 저장하고 Session-ID를 생성
  • Session-ID는 웹 브라우저 Cookie에 저장된다.
  • Session를 사용하면 Cookie도 사용한다.

3. Cookie 제어

웹 서버가 HTTP Cache을 Cache-control 응답 헤더로 제어한 것과 같이 Cookie 또한 Set-Cookie 헤더를 통해 웹 브라우저 저장을 제어한다.

  • 쿠키의 스코프 : Domain + Path
    어떤 URL을 쿠키가 보내야 하는지를 나타낸다.
    Domain : 전송되게 될 호스트를 명시
    Path : Cookie 헤더를 전송하기 위하여 요청되는 URL 내에 반드시 존재해야 하는 URL 경로
  • Persistent Cookie는 연구적인 쿠키는 Expires 속성에 명시된 날짜에 삭제되거나 Max-Age 속성에 명시된 기간 이후에 삭제된다.

  • Session Cookie는 현재 세션이 끝날 때 삭제된다.

예시) Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

4. Cookie 보안

쿠키 보안에는 HttpOnly, Secure, SameSite가 있다.

  • HttpOnly : JavaScrit에서 접근 가능 여부
    • XSS 공격을 방지하기 위해서 HttpOnly는 JAVAScript의 API에 접근할 수 없다.
    • 서버에 전송되기만 하는 Cookies
  • Secure : HTTPS 요청에 대해서만 전송 여부
    • HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 전송된다.
  • SameSite : Same-Origin에서만 전송 여부
    • cross-site 요청과 함께 전송되지 않았음을 요구하게 만든다.
    • cross-site 요청 위조 공격(CSRF)에 대해 보호 방법을 제공

      SameSite는 링크에서 자세히 확인 하세요 SameSite란?
      세션 하이재킹과 xss : 쿠키를 가로채는 것 (링크로 참조예정)

5. Cookie, Session의 장단점

  • 장점
    • 속도 빠르다. 쿠키는 정보가 브라우저에 있기에 서버에 요청 시 속도가 빠르다.
  • 단점
    • Cookie는 웹 브라우저에 저장이 되어서 민감 정보 저장은 안전하지 않다.
    • 웹 브라우저 간 공유가 불가능하다. 웹 브라우저 단위의 저장소이기에 지역성 문제가 발생
    • Cookie는 Domain+Path가 일치 시 해당 웹 서버로 모든 쿠키를 담아 보내기 때문에 저장하려는 정보량이 많아질수록 요청 크기가 커진다. 불필요한 Network Overhead 발생

5.2 Session의 장단점

  • 장점
    • 보안이 쿠키보단 우수하다. 민감정보들이 웹 서버 측에 안정하게 저장된다.
    • 웹 브라우저 간 공유가 가능하다.
  • 단점
    • 속도가 느리다. 세션은 정보가 서버에 있기 때문에 처리가 비교적 느린 속도를 가진다.

profile
개발자 준비생

0개의 댓글

관련 채용 정보