Jude Bellingham mang áo số 5 tại Real Madrid nhưng lại mang áo số 10 tại đội tuyển. Kylian Mbappé mang áo số 9 tại Real Madrid, nhưng mang áo số 10 tại đội tuyển.
Sau bài trước về Cookie, có lẽ bạn sẽ nghĩ:"À, vậy website nhớ mình nhờ Cookie."
😄
Đúng.
Nhưng...
Chưa đủ.
Nếu Cookie quan trọng như vậy.
Thì tại sao nhiều website vẫn còn dùng:
Session?
🤔
Và tại sao rất nhiều lập trình viên mới lại nhầm lẫn:
Session = Cookie?
😭
Hôm nay.
Chúng ta sẽ làm rõ điều đó.
Session và Cookie là gì?
Session và Cookie đều là cơ chế giúp website ghi nhớ thông tin giữa nhiều lần người dùng gửi request.
Khác biệt lớn nhất là:
- Cookie được lưu trên trình duyệt của người dùng.
- Session được lưu trên server.
Thông thường, hai cơ chế này sẽ phối hợp với nhau để quản lý đăng nhập và trạng thái người dùng.
Keyword SEO
session vs cookie
php session
php cookie
session là gì
cookie là gì
php login session
Ví dụ đời thường 🏨
Hãy tưởng tượng bạn đi thuê phòng khách sạn.
Nhân viên đưa bạn:
Một chiếc thẻ phòng.
😄
Chiếc thẻ đó giống như:
Cookie.
Còn thông tin thật như:
✔ Tên khách
✔ Số CMND
✔ Ngày nhận phòng
✔ Ngày trả phòng
✔ Loại phòng
...
Được lưu trong máy tính của khách sạn.
↓
Đó chính là:
Session.
Cookie giống chiếc vé 🎫
Cookie giống như:
Vé giữ xe.
Thẻ thư viện.
Thẻ phòng khách sạn.
...
Nó chỉ là:
"Mã nhận diện."
Không phải toàn bộ thông tin.
Session giống hồ sơ 📂
Session mới là nơi lưu:
Tên người dùng.
Quyền quản trị.
Giỏ hàng.
Thông tin đăng nhập.
Các dữ liệu tạm thời.
😎
Thông tin này nằm trên:
Server.
Không nằm trên máy người dùng.
Ví dụ đăng nhập 😄
Bạn nhập:
admin
123456↓
Đăng nhập thành công.
Website tạo:
Session:
Tên = Admin
Quyền = Administrator
ID = 25Đồng thời.
Trình duyệt nhận:
Cookie.
Ví dụ:
PHPSESSID = X7A91B...Lần sau.
Trình duyệt gửi:
PHPSESSIDServer nhìn mã đó.
↓
Mở đúng Session.
↓
Biết ngay:
Đây là Admin.
😄
Tại sao phải dùng cả hai?
Nếu chỉ có Session.
🤔
Server sẽ không biết.
Request mới.
Là của ai.
Nếu chỉ có Cookie.
🤔
Người dùng có thể sửa dữ liệu dễ hơn.
Vì Cookie nằm trên máy họ.
Cho nên.
Website hiện đại thường kết hợp:
Cookie
Session
↓
Nhanh.
An toàn.
Hiệu quả.
So sánh dễ hiểu 😎
| Cookie | Session |
|---|---|
| Lưu trên trình duyệt | Lưu trên server |
| Người dùng có thể xóa | Server quản lý |
| Có thể tồn tại nhiều ngày | Thường hết khi phiên làm việc kết thúc hoặc hết thời gian |
| Dùng để nhận diện | Dùng để lưu dữ liệu |
Đây là cách ghi nhớ đơn giản nhất.
InfinityFree Case 😅
Có bạn gửi mình project.
Đăng nhập xong.
Refresh.
↓
Bị logout.
😭
Kiểm tra.
Cookie vẫn còn.
Session lại biến mất.
Sau một hồi.
Phát hiện.
Bạn ấy quên:
session_start();🤡
PHP không mở Session.
Cho nên.
Cookie gửi đúng.
Server vẫn không biết phải đọc Session nào.
Xóa Cookie thì sao?
Ví dụ.
Bạn xóa:
Cookie.
↓
Trình duyệt không còn:
PHPSESSIDServer vẫn còn Session.
Nhưng...
Không biết request này thuộc Session nào.
↓
Bạn bị đăng xuất.
😄
Xóa Session thì sao?
Ngược lại.
Cookie vẫn còn.
Nhưng Session trên server đã hết hạn.
↓
Website nhận được mã.
↓
Tra cứu.
↓
Không thấy Session.
↓
Đăng xuất.
😅
Đó là lý do.
Có lúc Cookie còn.
Bạn vẫn bị logout.
Session có tồn tại mãi không?
Không.
😄
Server sẽ tự xóa Session sau một khoảng thời gian.
Ví dụ.
30 phút.
60 phút.
Hoặc theo cấu hình.
Đó là lý do.
Bạn để website cả ngày.
Quay lại.
↓
Phải đăng nhập lại.
Một hiểu lầm rất phổ biến 🤡
Nhiều người nghĩ.
Session an toàn tuyệt đối.
Không hẳn.
Nếu Session ID bị đánh cắp.
Kẻ xấu vẫn có thể giả mạo người dùng.
Đó là lý do.
Các website lớn luôn:
✔ Đổi Session ID sau khi đăng nhập.
✔ Dùng HTTPS.
✔ Thiết lập Cookie bảo mật.
Một mẹo cực hay 😎
Nếu website cứ:
Đăng nhập.
↓
Refresh.
↓
Logout.
Hãy kiểm tra ngay:
✔ Có session_start(); chưa?
✔ Cookie có được tạo không?
✔ Session có tồn tại không?
✔ Session đã hết hạn chưa?
Đây là bốn câu hỏi giúp giải quyết rất nhiều lỗi đăng nhập.
Echo và var_dump lại lên sân 😄
Khi nghi ngờ Session.
Đừng đoán.
Hãy kiểm tra.
session_start();
var_dump($_SESSION);Hoặc.
var_dump($_COOKIE);Bạn sẽ biết ngay.
Session còn không.
Cookie còn không.
Đó chính là tư duy debug mà chúng ta đã luyện từ các bài trước.
Debug kiểu dev thật 😎
✅ 1. Luôn gọi session_start()
Trước khi dùng Session.
✅ 2. Đừng lưu thông tin quan trọng trong Cookie
Cookie nên chứa mã nhận diện.
Không nên chứa mật khẩu.
✅ 3. Kiểm tra thời gian hết hạn
Nhiều lỗi logout chỉ vì Session timeout.
✅ 4. Dùng HTTPS
Giúp Cookie và Session an toàn hơn.
✅ 5. Dùng var_dump() khi debug
Đừng đoán.
Hãy xem dữ liệu thật.
Checklist chuẩn không cần chỉnh😎
☑ Cookie lưu trên trình duyệt
☑ Session lưu trên server
☑ Cookie giúp nhận diện người dùng
☑ Session lưu dữ liệu phiên làm việc
☑ Luôn gọi session_start();
☑ Không lưu mật khẩu trong Cookie
☑ Debug bằng $_SESSION và $_COOKIE
FAQ nhanh
Session có thay thế Cookie được không?
→ Không hoàn toàn.
Thông thường Session và Cookie sẽ phối hợp với nhau.
Cookie có an toàn hơn Session không?
→ Không.
Chúng phục vụ mục đích khác nhau.
Vì sao đăng nhập xong lại bị logout?
→ Có thể Session hết hạn, Cookie bị xóa hoặc quên gọi session_start();.
Website lớn có dùng Session không?
→ Có.
Đây vẫn là một trong những cơ chế phổ biến để quản lý đăng nhập.
Bạn có thể cũng đang gặp 😭
👉 Cookie là gì? (Vì sao website nhớ được bạn là ai?)
👉 Cache là gì? (Vì sao sửa code rồi mà website vẫn không thay đổi?)
👉 PHP login đúng password nhưng vẫn fail
👉 var_dump() là "vũ khí bí mật" của newbie
👉 echo debug và nghệ thuật "soi từng bước"
👉 Comment code đúng cách để khỏi tự giết mình
👉 Vì sao bug lúc có lúc không?
👉 White Screen of Death – Trang trắng xóa không báo lỗi
Tổng kết
Nếu phải giải thích cho một đứa trẻ 10 tuổi.
Mình sẽ nói thế này.
😄
Cookie giống như chiếc vé gửi xe.
Bạn giữ nó.
Mỗi lần quay lại.
Đưa vé.
↓
Người giữ xe biết chiếc xe nào là của bạn.
Nhưng.
Thông tin thật về chiếc xe.
Không nằm trên chiếc vé.
Mà nằm trong cuốn sổ của bãi giữ xe.
Cuốn sổ đó.
Chính là Session.
Cookie và Session.
Không phải đối thủ.
Cũng không phải hai công nghệ thay thế nhau.
Chúng giống như hai người đồng đội.
Một người giữ "chiếc vé".
Một người giữ "hồ sơ".
Thiếu một trong hai.
Rất nhiều chức năng đăng nhập sẽ hoạt động không đúng.
Và nếu bạn chỉ nhớ một điều từ bài này, hãy nhớ:
Cookie giúp website nhận ra bạn.
Session giúp website nhớ những gì thuộc về bạn.
Hai anh em này đi cùng nhau gần như trên mọi website hiện đại. 🚀