Đầu tiên cần hiểu về HTTP. HTTP là một giao thức không trạng thái (stateless), nghĩa là mỗi yêu cầu (request) mà client gửi đến server đều hoàn toàn độc lập. Server không thể xác nhận danh tính của client hiện tại, cũng không biết người gửi của yêu cầu trước có phải là cùng một client với yêu cầu hiện tại hay không.
Để theo dõi tương tác giữa client và server, các công nghệ duy trì trạng thái kết nối HTTP đã ra đời: Cookie và Session.

Cookie là gì?
Cookie là một mẩu dữ liệu nhỏ mà server gửi tới trình duyệt web của người dùng. Trình duyệt có thể lưu lại và gửi nó kèm theo các yêu cầu tiếp theo tới cùng server. Thông thường, cookie được dùng để xác định xem hai yêu cầu có đến từ cùng một trình duyệt hay không. Server cũng có thể sửa đổi nội dung của cookie khi cần.
Lưu ý quan trọng: Cookie không xuyên miền (non–cross-domain). Cookie phía client được trình duyệt quản lý, đảm bảo rằng Google chỉ thao tác cookie của Google, không phải của Facebook, nhờ đó bảo vệ quyền riêng tư người dùng. Trình duyệt quyết định một website có thể thao tác cookie hay không dựa trên tên miền.
Session là gì?
Session là một cơ chế khác để ghi nhận trạng thái phiên giữa server và client, khác với cookie. Điểm khác biệt là cookie được lưu trong trình duyệt của client, còn session được lưu trên server. Phía client sẽ lưu SessionID (mã định danh phiên) trong cookie.

Cookie & Session hoạt động như thế nào?
1. Lần truy cập đầu tiên: Client gửi yêu cầu lên server. Dựa trên thông tin do người dùng gửi, server tạo gói dữ liệu phiên tương ứng.
2. Phản hồi: Server phản hồi và trả về SessionID (mã định danh duy nhất) cho trình duyệt.
3. Lưu trữ phía client: Trình duyệt lưu SessionID đó trong một cookie, đồng thời cookie ghi nhận tên miền mà SessionID thuộc về.
4. Lần truy cập tiếp theo: Khi client truy cập lại server, trình duyệt tự động kiểm tra xem dưới tên miền này có cookie hay không.
- Nếu có, cookie (chứa SessionID) sẽ được gửi kèm lên server.
- Server lấy SessionID từ cookie, rồi tra cứu dữ liệu phiên tương ứng trên server.
5. Xác thực trạng thái:
- Tìm thấy session → chứng tỏ người dùng đã đăng nhập/hợp lệ, có thể tiếp tục các thao tác tiếp theo.
- Không tìm thấy session → nghĩa là người dùng chưa đăng nhập hoặc phiên không còn hiệu lực/thất bại.
Sự khác nhau giữa Cookie & Session
1) Bảo mật (Security)
- Session an toàn hơn cookie. Session được lưu ở phía server, còn cookie lưu ở trình duyệt (phía client).
- Dữ liệu trạng thái lưu trong trình duyệt có rủi ro bị can thiệp/sửa đổi để đánh lừa server, dễ dẫn đến rò rỉ quyền riêng tư và thiệt hại không đáng có.
- Kiểu dữ liệu lưu trữ: Cookie chỉ hỗ trợ chuỗi (string); nếu muốn lưu kiểu khác phải chuyển về chuỗi. Session có thể lưu nhiều kiểu dữ liệu.
2) Thời hạn hiệu lực (Validity period)
- Cookie có thể được đặt thời gian hết hạn dài.
- Session thường có thời hạn ngắn hơn và mất hiệu lực khi đóng trình duyệt/phiên, trừ khi hệ thống cấu hình khác đi.
3) Dung lượng lưu trữ (Storage sizes)
- Một cookie đơn lẻ thường không vượt quá ~ 4KB, nên không phù hợp cho dữ liệu trạng thái phức tạp.
- Session có thể lưu nhiều dữ liệu hơn (vì nằm trên server), nhưng khi lượng truy cập lớn thì tiêu tốn tài nguyên server nhiều hơn.
(Dịch thuật và tổng hợp)
ThS. Nguyễn Đỗ Thư Hương
Trưởng Bộ môn Cơ sở ngành – Khoa CNTT – ĐT