[Web] Cookie & Session

thereisname·2024년 5월 2일

Web

목록 보기
6/6

0. Cookie와 Session 등장 배경

1. Cookie & Session

웹 브라우저는 응답을 받아, 응답 헤더에 붙어있던 요청자 정보(어떤 웹 브라우저(유저)가 요청했는지 인지 가능한 정보)를 웹 브라우저 쿠키에 저장한다.

이후 요청부터 웹 서버에게 요청자 정보를 함께 전달하여 웹 서버는 누구의 요청인지 알 수 있다.

따라서 웹 서버는 웹 브라우저의 요청이 어떤 유저에 의해 요청된 것인지 알기위해 응답 반환시 요청자 정보를 함께 반환한다.

이 요청 정보를 어디에 저장하는지에 따라 쿠키와 세션으로 나뉜다.


2. Cookie

  • 요청자 정보(어떤 웹 브라우저(유저)가 요청했는지 인지 가능한 정보) 웹 브라우저에 저장할 때 사용된다.

  • 쿠키는 사용자의 웹 사이트 사용 정보를 저장하여, 사용자에게 최적화된 웹 환경을 제공하고, 웹사이트의 기본적인 기능을 활성화하는 데 사용됩니다.

  • HTTP에서 클라이언트의 상태정보를 쿠키 형태로 클라이언트 PC에 저장하였다가 필요 시 정보를 참조하거나 재사용할 수 있다.

  • 어떤 값이든 가능하나, 일반적으로 노출 방지를 위해 인간이 이해할 수 없는 형태로 저장됨.


Set-Cookie 헤더

  • 서버가 클라이언트(웹 브라우저)에게 쿠키를 전송할 때 사용.
  • 쿠키의 이름, 값, 만료 시간(유효시간), 도메인, 경로 등의 정보가 포함
  • 서버는 이 헤더를 통해 클라이언트에게 서버에게 쿠키를 생성하거나 수정할 수 있음.

Cookie 헤더

  • 클라이언트(웹 브라우저)가 서버에게 쿠키를 전송할 때 사용.
  • 이 헤더에는 클라이언트가 가지고 있는 쿠키 정보가 포함됩니다.
  • 클라이언트는 이 헤더를 통해 서버에게 자신의 쿠키 정보를 전달할 수 있음.

2.2 쿠키 속성

쿠키의 Domain 속성

서버는 쿠키를 생성하면 Set-Cookie 응답헤더에 Domain속성을 기술하여 어떤 사이트가 쿠키를 읽을 수 있는지 제어가 가능하다.

예를 들면 다음과 같다.
ex) Set-Cookie:user="woochan";domain="hello12213.com"

쿠키의 Path 속성

이는 웹 사이트의 일부만에 쿠키를 적용할 수 있게 해주는 속성이다.

ex) Set-Cookie:pref=compact";domain="hello12213.com";path=/hello/

따라서, 쿠키는 일종의 상태정보이다.

서버가 쿠키를 생성해 클라이언트에 전달하고, 클라이언트는 그 쿠키를 유효한 사이트에만 다시 전달하고, 관리한다.
[출처][HTTP] 쿠키 - 세션쿠키(Session Cookie), 지속쿠키(Persistent Cookie)|작성자 임우찬

2.3 쿠키 유효시간

만료 날짜와 시간이 설정되어 있어, 브라우저를 닫아도 계속 유지되며, 사용자가 직접 삭제하거나 만료 기간이 지나면 삭제된다.

사용자의 로그인 정보 등 장기적으로 저장해야 하는 데이터를 저장하는 데 사용된다.

브라우저 세션(Seesion)이 유지되는 동안만 유지되며, 브라우저를 닫을 경우 세션 쿠키는 자동으로 삭제된다.

사용자의 일시적인 정보를 저장하는 데 사용된다.

잠깐, Session 의미?
열고(connect) → 닫힘(disconnect) 의 하나의 Pair 에 모두 사용됨.


2.4 쿠키의 단점 (=Seesion의 장점)

  1. 쿠키 정보가 웹 브라우저에 저장되어 있어 보안 위험

    • 쿠키는 클라이언트 측에 저장되므로 쿠키 값이 노출되거나 조작될 수 있음.
  2. 웹 브라우저간 공유 불가

    • 매 웹 브라우저에서 하는 검색과 같은 행위들이 해당 브라우저에만 저장되기에 웹 브라우저간에 지역성 문제 발생.
  3. 크기 제한

    • Domain + Path 만 일치한다면 해당 웹 서버로 모든 쿠키를 담아 보내다니 쿠키로 저장하려는 정보가 많아질수록 용량이 커진다.


3. Seesion

  • 쿠키는 클라이언트(웹 브라우저)애 저장했다면 세션은 웹 서버측의 별개의 DB에 저장한다.
  • 서버에서는 클라이언트를 구분하기 위해 세션 ID(이름은 정하고 싶은대로 정해도 상관 없음)를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다. (session cookie 사용)

3.1 세션 동작 순서 (로그인 과정 예시)

  1. 사용자가 웹 사이트에서 ID, Password를 입력하여 서버에 로그인 요청을 보낸다.
  2. 서버는 DB를 확인하여 일치한다면 세션 객체를 생성하고 세션 ID를 부여한 뒤 서버 메모리에 저장한다.
  3. 로그인 요청의 응답으로 쿠키에 세션ID를 담아 사용자에게 보낸다.
  4. 사용자가 요청을 보낼 때 쿠키에 세션ID를 담아 요청을 보낸다.
  5. 서버에선 로그인 정보를 다시 확인하지 않고 세션ID를 통해 확인한다.
  6. 세션 ID가 유효하다면 해당 요청의 응답을 사용자에게 보낸다.

4. 쿠키 보안 속성


1. HttpOnly
클라이언트쪽에서 스크립트에서 쿠키에 접근하는 것을 차단한다.
2. Secure

  1. SameSite

참고
https://theheydaze.tistory.com/550

profile
개발을 공부하는 주니어 개발자

0개의 댓글