Django

[Django] Cookie & Session

winter17 2023. 4. 4. 09:53

1.  개요

  • 우리가 서버로부터 받은 페이지를 둘러볼 때 우리는 서버와 연결되어 있는 상태일까? → NO!

 

► HTTP

  • HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 규약 웹(www)에서 이루어지는 모든 데이터 교환의 기초

 

► HTTP 특징

  1. 비 연결 지향(connectionless) : 서버는 요청에 대한 응답을 보낸 후 연결을 끊음
  2. 무상태(stateless) : 연결을 끊는 순간 클라이언트와 서버 간의 통신이 끝나며 상태 정보가 유지되지 않음

 

► 무상태로 인한 문제

  • 장바구니에 담은 상품을 유지할 수 없음
  • 로그인 상태를 유지할 수 없음

2.  쿠키

► 쿠키(Cookie)

  • 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각
  • 클라이언트 측에서 저장되는 작은 데이터 파일이며, 사용자 인증, 사용자 추적, 상태 유지 등에 사용되는 데이터 저장 방식

► 쿠키 사용 예시

  1. 브라우저(클라이언트)는 쿠키를 로컬에 KEY-VALUE의 데이터 형식으로 저장
  2. 이렇게 쿠키를 저장해 놓았다가, 동일한 서버에 재요청 시 저장된 쿠키를 함께 전송
  3. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용됨
    • 이를 이용해 사용자의 로그인 상태를 유지할 수 있음
    • 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억 시켜 주기 때문

 

► 쿠키 사용 목적

  • 세션 관리(Session management)
    • 로그인, 아이디 자동완성, 공지 하루 안 보기, 팝업 체크, 장바구니 등의 정보 관리
  • 개인화(Personalization)
    • 사용자 선호, 테마 등의 설정
  • 트래킹(Tracking)
    • 사용자 행동을 기록 및 분석

 

응답한 서버로부터 쿠키를 받아 브라우저에 저장하고, 클라이언트가 같은 서버에 재요청 시마다 저장해 두었던 쿠키도 요청과 함께 전송한다 → 로그인 되어있다는 사실을 입증할 데이터를 계속 보내는 것

 

 

► 세션(Sessions)

  • 서버 측에서 생성되어 클라이언트와 서버 간의 상태를 유지 상태 정보를 저장하는 데이터 저장 방식
  • 쿠키에 세션 데이터를 저장하여 매 요청시마다 세션 데이터를 함께 보냄

 

► 세션 작동 예시

  1. 클라이언트가 로그인을 하면 서버가 session 데이터를 생성 후 저장
  2. 생성된 session 데이터에 인증 할 수 있는 session id를 발급
  3. 발급한 session id를 클라이언트에게 응답
  4. 클라이언트는 응답 받은 session id를 쿠키에 저장
  5. 클라이언트가 다시 동일한 서버에 접속하면 요청과 함께 쿠키(session id가 저장된)를 서버에 전달
  6. 쿠키는 요청 때마다 서버에 함께 전송 되므로 서버에서 session id를 확인해 로그인 되어있다는 것을 알도록 함

 

 

 세션은 서버 측에서 저장됨

 

 서버 측에서는 세션 ID를 생성하고, 이 ID를 클라이언트 측으로 전달하여, 클라이언트는 쿠키에 이 ID를 저장

 

 쿠키와 세선의 목적 : 클라이언트와 서버 간의 상태를 유지


 

3.  참고

► 쿠키 종류별 Lifetime(수명)

  • Session cookie
    • 현재 세션(current session)이 종료되면 삭제됨
    • 브라우저 종료와 함께 세션이 삭제됨
  • Persistent cookies
    • Expires 속성에 지정된 날짜 혹은 Max-Age 속성에 지정된 기간이 지나면 삭제됨

 

► 세션 in Django

  • Django는 'datavase-backed sessions' 저장 방식을 기본 값을 사용
  • session 정보는 DB의 django_session 테이블에 저장
  • Django는 특정 session id를 포함하는 쿠키를 사용해서 각각의 브라우저와 사이트가 연결된 session을 알아냄
  • Django는 우리가 seesion 메커니즘(복잡한 동작원리)에 대부분을 생각하지 않게끔 많은 도움을 줌