session-auth-vs-jwt-auth

Cuộc đại chiến giữa hai môn phái: Session Auth vs JWT Auth

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ểmSession AuthJWT 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 choWeb 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ầnNhanh hơn vì không truy DB
Bảo mậtTốt với cookie + HTTPSDễ lộ token nếu không cẩn thận
Gia hạn phiên (refresh)Tự động qua cookieCần cơ chế refresh token thủ công
LogoutDễ – chỉ xoá sessionPhức tạp – phải vô hiệu hóa token
Triển khaiDễ, Laravel hỗ trợ sẵnCần setup thêm package và cấu hình
Kiểm soát người dùng onlineDễ (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ốngMôn phái khuyên dùng
Web nội bộ, quản lý user, adminSession Auth
Ứng dụng mobile, React/Vue SPAJWT 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

Leave a Comment

Your email address will not be published. Required fields are marked *