Quản lý Cookie và Session trong Django

Tổng quan về Cookie và Session

Cookie và Session là hai cơ chế phổ biến để duy trì trạng thái người dùng trong ứng dụng web. Trong khi cookie lưu trữ dữ liệu trên trình duyệt của người dùng, session lại lưu trữ dữ liệu trên máy chủ và chỉ gửi một session ID qua cookie.

Cookie trong Django

Django cung cấp các phương thức đơn giản để thao tác với cookie thông qua đối tượng HttpResponse.

Thiết lập Cookie

def set_cookie_view(request):
    response = HttpResponse("Cookie đã được thiết lập")
    response.set_cookie('user_token', 'abc123xyz', max_age=3600)  # Hết hạn sau 1 giờ
    return response

Lấy giá trị Cookie

def get_cookie_view(request):
    token = request.COOKIES.get('user_token', 'Không tìm thấy')
    return HttpResponse(f"Token: {token}")

Xóa Cookie

def delete_cookie_view(request):
    response = HttpResponse("Cookie đã bị xóa")
    response.delete_cookie('user_token')
    return response

Session trong Django

Session trong Django mặc định sử dụng cơ sở dữ liệu để lưu trữ dữ liệu phiên làm việc. Mỗi session được liên kết với một session key duy nhất được lưu trong cookie.

Kích hoạt Session

Đảm bảo rằng middleware session đã được bật trong file settings.py:

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

Thiết lập Session

def set_session_view(request):
    request.session['user_id'] = 101
    request.session['username'] = 'nguyen_van_a'
    return HttpResponse("Session đã được lưu")

Lấy giá trị Session

def get_session_view(request):
    user_id = request.session.get('user_id', None)
    username = request.session.get('username', 'Khách')
    return HttpResponse(f"Xin chào {username} (ID: {user_id})")

Xóa Session

def clear_session_view(request):
    # Xóa toàn bộ session
    request.session.flush()
    return HttpResponse("Session đã được xóa hoàn toàn")

Cấu hình Session

Một số cấu hình phổ biến trong settings.py:

# Thời gian sống của session (giây)
SESSION_COOKIE_AGE = 3600

# Đóng session khi đóng trình duyệt
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

# Tên cookie chứa session ID
SESSION_COOKIE_NAME = 'mysite_sessionid'

So sánh Cookie và Session

Tiêu chí Cookie Session
Vị trí lưu trữ Trình duyệt người dùng Máy chủ
Bảo mật Thấp (có thể bị sửa đổi) Cao (chỉ gửi session ID)
Dung lượng ~4KB mỗi cookie Không giới hạn (phụ thuộc vào máy chủ)
Sử dụng điển hình Lưu tùy chọn giao diện, theo dõi Xác thực người dùng, giỏ hàng

Lưu ý bảo mật

  • Không lưu thông tin nhạy cảm (mật khẩu, token) trực tiếp vào cookie.
  • Sử dụng set_cookie(..., httponly=True, secure=True) để tăng cường bảo mật.
  • Luôn xác thực lại dữ liệu từ session trước khi xử lý nghiệp vụ quan trọng.

Thẻ: Django Cookie Session web-security authentication

Đăng vào ngày 2 tháng 8 lúc 06:28