I. Bôn tẩu giang hồ
Từ thuở giang hồ còn sơ khai, các ứng dụng web cổ điển sử dụng Session Auth — một môn phái lâu đời, đơn giản, hiệu quả.
Nhưng rồi, khi thế giới SPA (Single Page Application) và API trỗi dậy, một môn phái mới xuất hiện: JWT Auth — gọn gàng, tự do, hành tẩu khắp thiên hạ không cần server nhớ mặt.
Hai phái tuy khác đường, nhưng đều hướng tới một mục tiêu: xác thực danh tính người dùng.
Vậy ai là cao thủ đệ nhất thiên hạ? Hãy cùng ta luận một hồi!
II. Tuyệt kỷ của từng môn phái
Phái Session Auth – “Truyền thống chính tông”
Nguyên lý:
Khi người dùng đăng nhập, server tạo một “session” lưu trong bộ nhớ hoặc database.
Một “token bí mật” (session ID) được gửi về trình duyệt, lưu trong cookie.
Từ đó, mỗi lần người dùng gửi request, cookie ấy giúp server nhận ra họ.
Vũ khí bí truyền:
php artisan make:auth– thần công tự động hoá.Illuminate\Session– nội công thâm hậu.csrf_token()– hộ thân pháp tránh bị tấn công CSRF.
Phái JWT Auth – “Hiệp khách giang hồ tự do”
Nguyên lý:
Khi người dùng đăng nhập, server trả về một JWT (JSON Web Token) – chứa thông tin mã hoá (payload).
Token này đi theo mọi request (thường nằm trong header Authorization: Bearer <token>).
Server không cần lưu gì cả – chỉ cần xác minh chữ ký là biết thật giả.
Vũ khí bí truyền:
tymon/jwt-auth– bí kíp phổ biến trong Laravel.firebase/php-jwt– bảo vật do tiền nhân Google để lại.- Header
Authorization– như lệnh bài của triều đình, đi đến đâu cũng có hiệu lực.
III. So sánh chiêu thức
| Đặc điểm | Session Auth | JWT Auth |
|---|---|---|
| Lưu trữ | Trên server (session store, Redis, DB…) | Trên client (localStorage, cookie, memory…) |
| Trạng thái (state) | Có trạng thái (stateful) | Không trạng thái (stateless) |
| Phù hợp cho | Web truyền thống (Blade, Livewire…) | SPA, Mobile app, API đa nền tảng |
| Tốc độ | Cần truy xuất session mỗi lần | Nhanh hơn vì không truy DB |
| Bảo mật | Tốt với cookie + HTTPS | Dễ lộ token nếu không cẩn thận |
| Gia hạn phiên (refresh) | Tự động qua cookie | Cần cơ chế refresh token thủ công |
| Logout | Dễ – chỉ xoá session | Phức tạp – phải vô hiệu hóa token |
| Triển khai | Dễ, Laravel hỗ trợ sẵn | Cần setup thêm package và cấu hình |
| Kiểm soát người dùng online | Dễ (dựa vào session table) | Khó hơn – token không lưu trạng thái |
IV. Khi nào nên dùng?
Session Auth – Dành cho đệ tử nội môn
Dùng khi:
- Ứng dụng chủ yếu là web truyền thống (Laravel Blade, Inertia, Livewire).
- Hệ thống cần quản lý phiên đăng nhập chặt chẽ, ví dụ admin panel, cổng nội bộ.
- Muốn tận dụng bảo mật cookie và CSRF protection sẵn có của Laravel.
🧙 “Muốn an định giang sơn, cứ trung thành với Session Auth.”
JWT Auth – Dành cho hiệp khách phiêu bạt
Dùng khi:
- Xây dựng API cho mobile, SPA, microservices.
- Cần xác thực không phụ thuộc server.
- Muốn người dùng đăng nhập 1 lần – dùng mọi nơi (SSO, đa nền tảng).
🥷 “Đi khắp thiên hạ, mang theo JWT là đủ — chỉ cần chữ ký hợp lệ.”
V. Tổng kết giang hồ
| Tình huống | Môn phái khuyên dùng |
|---|---|
| Web nội bộ, quản lý user, admin | Session Auth |
| Ứng dụng mobile, React/Vue SPA | JWT Auth |
| API kết nối nhiều dịch vụ | JWT Auth |
| Muốn bảo mật cookie và CSRF sẵn có | Session Auth |









