해시에 대해서는 이전글을 참고하기
https://mynews0741.tistory.com/56
md5를 암호화할 때 사용하지 마셈(보안이 뚫린적이 있다고함)
1. Cookie와 Session 개념 비교
Cookie (쿠키)
- 클라이언트(브라우저) 측에 저장되는 작은 텍스트 파일
- 용량 제한: 약 4KB
- 만료시간을 설정할 수 있음
- 주로 사용자 설정이나 비로그인 상태의 정보 저장에 사용
Session (세션)
- 서버 측에 저장되는 사용자별 정보
- 세션 ID만 쿠키로 클라이언트에 저장
- 서버 메모리에 저장되므로 용량 제한이 상대적으로 자유로움
- 보안이 중요한 데이터 저장에 적합
2. Django에서 세션이 더 선호되는 이유
보안성
- 세션은 데이터를 서버에 저장하므로 클라이언트 측에서 데이터를 조작할 수 없음
- 쿠키는 클라이언트에 저장되어 변조의 위험이 있음
Django 인증 시스템과의 통합
- Django의 기본 인증 시스템이 세션 기반으로 동작
- 로그인, 로그아웃 등의 기능이 세션을 기본으로 사용
데이터 처리의 유연성
- 복잡한 데이터 구조를 쉽게 저장/관리 가능
- 쿠키는 텍스트 기반이라 복잡한 데이터 처리가 제한적
3. Django에서의 Session 사용법
세션 설정 (Set Session)
def set_session_example(request):
# 기본적인 세션 설정
request.session['user_id'] = 123 # 단순 값 저장
# 복잡한 데이터 저장
request.session['cart'] = { # 딕셔너리 형태로 저장
'items': [1, 2, 3],
'total': 1000
}
# 세션 만료 시간 설정
request.session.set_expiry(300) # 5분 후 만료
세션 읽기 (Get Session)
def get_session_example(request):
# 세션에서 값 가져오기
user_id = request.session.get('user_id', 'anonymous') # 기본값 설정 가능
# 세션 존재 여부 확인
if 'cart' in request.session:
cart = request.session['cart']
세션 삭제
def clear_session_example(request):
# 특정 세션 삭제
del request.session['user_id']
# 전체 세션 삭제
request.session.flush()
4. 실제 활용 예시: 로그인 시스템
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
# 세션에 사용자 정보 저장
request.session['is_logged'] = True # 로그인 상태 저장
request.session['user_id'] = user.id # 사용자 ID 저장
request.session['username'] = user.username # 사용자명 저장
# 선택적으로 세션 만료 시간 설정
if request.POST.get('remember_me'):
request.session.set_expiry(7 * 24 * 3600) # 7일 동안 유지
return redirect('home')
return render(request, 'login.html')
def logout_view(request):
# 로그아웃 시 세션 전체 삭제
request.session.flush()
return redirect('login')
5. Session 사용 시 주의사항
- 성능 관련
- 필요한 데이터만 최소한으로 저장
- 더 이상 필요 없는 세션은 즉시 삭제
- 적절한 만료 시간 설정
- 보안 관련
- 민감한 정보는 반드시 암호화하여 저장
- 세션 ID 노출 방지
- HTTPS 사용 권장
- 데이터 관리
- 세션 데이터는 주기적으로 정리
- 큰 데이터는 데이터베이스에 저장하고 세션에는 참조만 저장
6. 쿠키 사용이 적합한 경우
- "오늘 하루 보지 않기" 팝업 설정
- 사용자 테마/언어 선호도 저장
- 비로그인 장바구니 (간단한 정보만 저장)
- 방문 기록 추적
정리
- Django 개발에서는 보안과 편의성 때문에 세션 사용을 선호
- 쿠키는 간단한 사용자 설정이나 비로그인 상태의 정보 저장에 제한적으로 사용
- 세션은 로그인 정보, 사용자 데이터 등 중요한 정보 저장에 사용
'Today I learned' 카테고리의 다른 글
장고 블로그 꾸미기(코드 없음) (8) | 2025.01.20 |
---|---|
WIL 디장고의 관례 (0) | 2025.01.17 |
디장고 블로그 만들기 튜토리얼 (5) | 2025.01.16 |
Djaneiro - Django Snippets 사용법 (5) | 2025.01.15 |
2025.01.13 디제이앙고 연습 (0) | 2025.01.14 |