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.