CS ( Computer Science )/네트워크 (Networking)

[Net] Session & Cookie의 관계

JABHACK 2024. 12. 31. 21:43

세션과 쿠키는 항상 함께 다니는 이유는, 세션이 동작하는 데 쿠키가 필요한 경우가 많기 때문입니다.


1. 세션과 쿠키의 관계

세션과 쿠키는 역할이 다름

  • 세션은 서버에서 클라이언트를 관리하기 위해 사용하는 데이터입니다.
  • 쿠키는 클라이언트(브라우저)에 데이터를 저장하기 위해 사용하는 기술입니다.

왜 세션에 쿠키가 필요할까?

  • 세션은 클라이언트를 식별하기 위해 세션 ID를 발급합니다.
  • 세션 ID를 클라이언트와 서버 간에 주고받아야 세션 상태를 유지할 수 있습니다.
  • 쿠키는 이 세션 ID를 클라이언트 측에 저장하고, 이후 요청마다 서버로 전달하는 데 사용됩니다.

2. 세션과 쿠키가 항상 같이 다니는 이유

  1. 세션 ID 전달
    • 서버는 클라이언트를 식별하기 위해 세션 ID를 발급하고, 이를 클라이언트에 저장해야 합니다.
    • 세션 ID를 저장하고 서버로 다시 전달하는 가장 일반적인 방법이 쿠키입니다.
    • :
      HTTP/1.1 200 OK
      Set-Cookie: JSESSIONID=abcd1234; Path=/; HttpOnly
      
  2. 자동 관리
    • 쿠키는 브라우저가 자동으로 관리하므로, 클라이언트가 따로 세션 ID를 전송하지 않아도 브라우저가 요청마다 서버로 쿠키를 전송합니다.
    • :
      GET /profile HTTP/1.1
      Host: example.com
      Cookie: JSESSIONID=abcd1234
      
  3. 보안 및 편의성
    • 세션 ID를 URL로 전달하는 방법(예: URL Rewriting)은 보안 문제와 관리상의 불편함이 있습니다.
    • 쿠키를 사용하면 세션 ID가 URL에 노출되지 않아 보안성이 더 높습니다.

3. 세션 사용 시 쿠키를 따로 저장하지 않는 경우

쿠키 없이 세션을 유지하는 방법

  • 쿠키를 사용하지 않고도 세션을 유지할 수 있지만, 이는 덜 일반적이며, 다음과 같은 방식으로 구현됩니다.
  1. URL Rewriting:
    • 세션 ID를 URL에 포함하여 클라이언트와 서버 간에 전달.
    • :
      GET /profile;jsessionid=abcd1234 HTTP/1.1
      
    • 단점:
      • URL이 길어지고 관리가 어려움.
      • 세션 ID가 링크를 통해 외부로 유출될 위험이 있음.
  2. Hidden Field (HTML 폼):
    • 세션 ID를 숨겨진 HTML 입력 필드에 저장하여 폼 데이터와 함께 전송.
    • :
      <form action="/profile" method="POST">
          <input type="hidden" name="jsessionid" value="abcd1234">
          <button type="submit">Submit</button>
      </form>
      
    • 단점:
      • GET 요청에는 사용할 수 없음.
      • 페이지마다 세션 ID를 포함해야 하므로 구현이 복잡.

4. 세션과 쿠키의 공통 허용 여부

웹 브라우저 설정에서 세션과 쿠키가 항상 함께 나오는 이유

  • 쿠키는 세션 ID를 저장하고 전송하는 데 자주 사용되므로, 쿠키가 차단되면 세션도 제대로 동작하지 않을 가능성이 큽니다.
  • 쿠키를 허용하지 않으면 세션 유지가 어려워질 수 있으므로, 브라우저에서 "세션과 쿠키"를 함께 설정 항목으로 묶는 경우가 많습니다.

5. 세션과 쿠키의 차이

  세션(Session) 쿠키(Cookie)
저장 위치 서버 클라이언트(브라우저)
용도 사용자 상태 관리 (예: 로그인) 사용자 데이터 저장 (예: 선호 테마, 언어)
보안성 데이터는 서버에 저장되므로 비교적 안전 클라이언트에 저장되므로 조작/탈취 가능성 있음
데이터 전송 세션 ID만 전송 쿠키 전체 데이터가 요청마다 서버로 전송
유효 기간 서버에서 설정 가능 (일반적으로 세션 유지 동안) 설정된 만료 시간에 따라 유지
상호작용 쿠키를 통해 세션 ID를 전달하는 데 사용 세션 없이도 독립적으로 사용 가능

6. 요약

  • 세션은 서버에서 사용자 상태를 관리하기 위한 데이터이고, 쿠키는 세션 ID를 저장하고 클라이언트와 서버 간에 전송하는 역할을 합니다.
  • 쿠키를 사용하면 세션 ID를 쉽게 관리하고 전송할 수 있으므로, 세션과 쿠키가 자주 함께 사용됩니다.
  • 세션은 반드시 쿠키에 의존하지는 않지만, 쿠키를 사용하지 않으면 구현이 복잡하고 관리가 어려워질 수 있습니다.
    따라서 세션과 쿠키는 **"같이 다니는 것처럼 보인다"**고 느껴질 수 있습니다.

 

'CS ( Computer Science ) > 네트워크 (Networking)' 카테고리의 다른 글

[Net] Filter  (1) 2025.01.01
[Net] Token & JWT  (0) 2024.12.29
[Net] Cookie  (1) 2024.12.28
[Net] MVC 패턴  (0) 2024.12.13
[Net] API 설계  (0) 2024.12.12