Django에서 쿠키와 세션 관리하기

쿠키

쿠키의 개념

  • 쿠키는 서버에서 생성되어 웹 브라우저에 저장되는 작은 데이터로, 키-값 형태로 구성됩니다.
  • 서버는 응답 시 쿠키를 포함하여 전송하고, 브라우저는 이를 자동으로 저장합니다.
  • 브라우저가 동일한 서버에 재요청할 때, 해당 도메인의 모든 쿠키 정보를 함께 전달합니다.
  • 기본적으로 브라우저 종료 시 쿠키는 만료되며, 각 도메인당 최대 50개까지 저장 가능합니다.
  • 하나의 쿠키는 최대 4KB 크기 제한이 있으며, 브라우저마다 약간씩 차이가 있을 수 있습니다.
  • 보안상 쿠키는 도메인 기반으로 격리되어 있으며, 다른 사이트의 쿠키는 접근할 수 없습니다.

Django에서 쿠키 다루기

  • 쿠키 값 읽기:
# 방법 1
value = request.COOKIES['key_name']

# 방법 2 (권장)
value = request.COOKIES.get('key_name')
  • 쿠키 설정하기:
response.set_cookie('key_name', value, max_age=seconds, expires=datetime_object)
  • max_age: 초 단위로 지정된 시간 후 만료
  • expires: 특정 날짜/시간에 만료되도록 설정 (datetime 또는 timedelta 객체)
  • 두 옵션 중 하나만 사용해야 하며, 생략하면 브라우저 종료 시 만료됩니다.

세션

세션의 개념

  • 민감하거나 중요한 정보(예: 계좌번호, 잔액, 인증 코드 등)는 서버 측에 저장하는 것이 안전하며, 이를 세션이라고 합니다.
  • 세션은 쿠키에 의존적이므로, 클라이언트가 쿠키를 차단하면 세션 기능도 작동하지 않습니다.
  • Django 프로젝트에는 기본적으로 세션 모듈이 활성화되어 있으며, 세션 데이터는 데이터베이스에 자동 저장됩니다.
  • 세션에도 유효기간이 있으며, 별도 설정이 없으면 2주 후에 자동 만료됩니다.

세션 활용법

1. 세션 기능 활성화

Django에서는 세션이 기본적으로 활성화되어 있으나, 비활성화하려면 settings.py 파일에서 SessionMiddleware를 제거하면 됩니다.

2. 세션 데이터 조작 (request.session)

  • 세션 저장:
request.session['key'] = 'value'
  • 세션 조회:
value = request.session.get('key', default_value)
  • 모든 세션 삭제:
request.session.clear()     # 세션 내용만 삭제
request.session.flush()     # 세션 전체 삭제 및 관련 쿠키도 제거
  • 특정 세션 항목 삭제:
del request.session['key']   # 존재하지 않으면 KeyError 발생
  • 세션 만료 시간 설정:
request.session.set_expiry(value)
  • value가 정수형이면 그만큼의 초 이후에 세션이 만료됩니다.
  • value가 0이면 브라우저 종료 시 만료됩니다.
  • value가 None이면 세션이 영구적으로 유지됩니다.

세션 저장 방식 설정

세션 데이터는 여러 위치에 저장될 수 있으며, settings.py 파일의 SESSION_ENGINE 설정을 통해 지정할 수 있습니다.

  • 데이터베이스에 저장 (기본값):
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
  • 캐시(메모리)에 저장: 속도는 빠르지만 서버 재시작 시 데이터가 사라집니다.
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
  • 캐시 + 데이터베이스 혼합: 우선 캐시에서 읽고, 없으면 DB에서 가져옵니다.
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
  • Redis에 저장: 외부 Redis 서버를 이용해 세션 관리

태그: Django cookie Session web-development authentication

8월 26일 18:28에 게시됨