본문 바로가기
네트워크

쿠키와 세션

by 고선제 2023. 9. 30.

쿠키(Cookie)

  1. 쿠키란?
  • 사용자가 임의의 웹사이트를 방문할 경우 웹브라우저를 통해 사용자의 컴퓨터에 저장되는 작은 기록파일을 말한다.
  • 상태를 저장하기 위해 사용
  • 사용자에 의해 HTTP요청이 발생하면 웹브라우저는 쿠키를 웹사이트에 같이 전송해준다.

    2. 쿠키는 어디에 저장되는가?

  • 쿠키는 웹사이트를 접속한 사용자의 디바이스(휴대폰, 테블릿, PC 등)에 저장된다.

 

    3. 쿠키의 동작원리

→ 쿠키의 동작원리 예시이다.

  1. 사용자가 자신의 컴퓨터를 이용해 브라우저에 주소를 치면 브라우저에 주소를 입력한다.
  2. 브라우저는 그 요청받은 주소에 해당하는 웹서버에 데이터를 요청한다.
  3. 웹서버는 응답헤더에 쿠키를 설정하라는 명령을 내린다.
  4. 브라우저는 먼저 요청받은 데이터를 사용자에게 전달한다.
  5. 브라우저는 이후 응답헤더의 Set-Cookie 명령에 의해 로컬 디바이스의 특정위치에 쿠키를 파일 조각의 형태로 저장을 한다. 쿠키는 Key-Value 쌍으로 이루어져 있다.
  6. 이후 사용자가 버튼을 클릭하여 두 번째 요청이 브라우저에게 요청한다.
  7. 요청전 로컬 디바이스의 쿠키저장소에서 쿠키를 찾는다.
  8. 브라우저는 찾은 쿠키와 함께 리퀘스트 헤더에 쿠키를 담아 보낸다.
  9. 쿠키 속성
  • Name
  • : 쿠키를 구분하는 유일 식별자
  • Value
  • : 쿠키의 값이 저장되어 있다.
  • Domain
  • : 브라우저가 웹서버로 쿠키를 전송할 때 해당 도메인과 일치하는 요청에 대해서만 쿠키를 전송한다.
  • Path
  • : 브라우저가 웹 서버로 쿠키를 전송할 때 해당 경로와 일치하는 쿠키만 전송한다.
  • Expires/ Max-Age
  • : 사용자가 다시 웹서버에 요청하지 않는 한 쿠키를 제어 할 수 없기 때문에 쿠키의 만료기한을 지정한다.
  • Size
  • : 쿠키의 크기
  • HttpOnly
  • : 오직 HTTP의 응답헤더로만 쿠키 설정이 가능하다. 자바스크립트나 다른 접근 방식으로 쿠키의 값을 변경하거나 조회할 수 없다는 것이다.
  • Secure
  • : Https 통신일 경우에만 쿠키를 전송한다.

세션(Session)

  1. 세션이란?
  • 세션은 일정 기간 동안 같은 클라이언트로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.
    • 일정 시간 : 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점
  • 클라이언트와 서버 간의 연결 상태
  1. 세션 동작 과정

  1. 클라이언트가 웹사이트에 접속해 서버에 요청한다.
  2. 서버는 접속한 클라이언트에게 세션ID를 부여해 응답한다.
  3. 클라이언트는 해당 세션 ID를 헤더 쿠키에 넣어 데이터를 요청한다.
  4. 서버는 세션ID를 통해 클라이언트를 구별하여 데이터를 알맞게 응답한다.
  5. 클라이언트가 접속을 종료한다.
  6. 서버는 세션 ID를 제거한다.
  7. 세션 장점
  • 접속이 끊김과 동시에 사용자를 구별하는 세션ID가 제거되기 때문에 보안상 훨씬 안전하다.
  • 쿠키는 실제 로컬에 사용자 정보가 저장이 되어 보안이 취약.

쿠키와 세션의 차이

  • 쿠키는 클라이언트에 저장되지만, 세션은 서버에 저장된다.
  • 세션은 서버에 저장되므로 서버의 자원을 사용하지만, 쿠키는 클라이언트에 저장되므로 서버의 자원을 사용하지 않는다는 이점이 있다.
  • 서버에 요청을 보내는 사용자가 많을 경우 세션은 부하가 심할 수 있다.
  • 세션은 쿠키를 이용해 쿠키에 세션ID만 저장하고 서버에서 세션을 처리하기 때문에 비교적 보안성이 좋다.
  • 쿠키는 만료시간 동안 파일로 저장되므로 브라우저를 종료해도 정보가 남아있지만 세션은 브라우저가 종료되면 만료시간에 상관없이 삭제된다.

[Reference]

'네트워크' 카테고리의 다른 글

HTTP 1.1과 HTTP 2.0  (0) 2024.09.19
Web Server, Apache, Nginx  (0) 2024.07.30
비연결성과 비상태성  (1) 2023.09.30