- Session (stateful): sau khi đăng nhập, server lưu dữ liệu phiên ở phía server (bộ nhớ/Redis/DB) và trả về một session id mờ (opaque) trong cookie. Mỗi request server tra store để biết là ai. Ưu: thu hồi tức thì (xóa phiên server-side), đổi quyền dễ. Nhược: cần store phiên dùng chung khi scale nhiều instance; cookie kéo theo rủi ro CSRF.
- Token/JWT (stateless): server cấp một token có chữ ký chứa sẵn claim (user id, vai trò,
exp); client gửi kèm ở headerAuthorization: Bearer .... Server chỉ verify chữ ký, không cần tra DB. Ưu: hợp stateless/scale ngang, tiện cho API/mobile/microservice. Nhược: khó thu hồi trước hạn → dùng access token sống ngắn + refresh token; payload chỉ base64 (không mã hóa) nên không để dữ liệu nhạy cảm.
Tóm gọn hướng dùng: web app một domain cần thu hồi chặt → session cookie; API/nhiều service không giữ state → token. Chọn thế nào cho một hệ cụ thể (kèm luồng refresh/revoke) là câu thiết kế riêng.