Không ai là hoàn hảo, có những chuyện mà chúng ta muốn mọi người "quên phắt" đi càng lâu càng tốt, một ngày đẹp trời nào đó, bỗng dưng ông "bạn nối khố" vui miệng nhắc lại chuyện ngày xưa hai thằng trèo tường ăn trộm ổi nhà bà hàng xóm đứng lúc đăng ngồi cạnh "người trong mộng" thì đúng là...hết thuốc chữa!
Bạn vào Facebook.Login.
Click chọn:
☑ Remember MeMột tuần sau.
Mở lại.
😎 Vẫn đăng nhập.
Một tháng sau.
Mở lại.
😎 Vẫn đăng nhập.
Bạn bắt đầu "théc méc" tự hỏi:
"Ủa?"
"Website nhớ mình kiểu gì?"
"Nó có siêu năng lực à?"
😄
Remember Me là gì?
Remember Me là tính năng cho phép website ghi nhớ trạng thái đăng nhập của người dùng trong thời gian dài.
Thay vì:
Tắt trình duyệt
↓
Mất loginWebsite sẽ:
Tắt trình duyệt
↓
Mở lại
↓
Vẫn loginTính năng này thường dùng:
- Gmail
- Shopee
- Lazada
- Diễn đàn
- Website thành viên
Ví dụ trớt quớt 😭
Bạn không dùng Remember Me.
User login.
5 phút sau:
Tắt trình duyệtMở lại.
💀
Login AgainNgười dùng...giận:
"Thôi nghỉ."
"Tôi nhớ password còn website không nhớ tôi."
😅
Ví dụ đời thường 🍜
Bạn tới quán cà phê quen.
Ngày nào cũng tới.
Chủ quán nhìn thấy:
"À, anh uống đen đá ít đường đúng không?"
😎
Đó chính là:
Remember MeWebsite nhận ra bạn mà không cần hỏi lại.
Session bình thường hoạt động thế nào? 😵
Người mới thường nghĩ:
$_SESSIONlà Remember Me.
Không hẳn.
Session thường sống tới khi:
Đóng trình duyệthoặc
Hết thời gian sốngVí dụ:
$_SESSION['user'] = 'admin';Login được.
Nhưng vài giờ sau:
💀
Session mất.
Remember Me dùng gì? 😎
Câu trả lời là:
CookieCookie có thể sống:
- 1 ngày
- 7 ngày
- 30 ngày
- 1 năm
Ví dụ:
setcookie(
"username",
"admin",
time()+86400
);Cookie tồn tại:
24 giờCách người mới hay làm 🤡
setcookie(
"username",
$username,
time()+86400*30
);Sau đó:
Cookie chứa usernameĐăng nhập tự động.
Chạy được.
Nhưng...
Sai lầm cực nguy hiểm 😭
Một số người lưu:
Cookie:
username=admin
password=123456💀💀💀
Đây là cách cực kỳ không nên làm.
Nếu máy tính bị xem cookie.
Password lộ luôn.
😭
Website lớn làm thế nào? 😎
Facebook không lưu:
password thậtHọ thường lưu:
tokenVí dụ:
a8d7f9h2k1...Token không phải password.
Nếu token hết hạn:
Login AgainAn toàn hơn rất nhiều.
Mô hình Remember Me đơn giản 😎
Login thành công.
PHP tạo:
$token = bin2hex(random_bytes(32));Lưu token vào:
Databasevà
CookieLần sau user quay lại.
PHP kiểm tra:
Cookie token
↓
Database token
↓
Có khớp?Nếu:
YESTự động login.
😎
InfinityFree Case 😅
Rất nhiều bạn nghĩ:
"Remember Me không chạy."
"Chắc host lỗi."
Thực tế thường là:
Cookie chưa được tạo.
Hoặc:
setcookie()đặt sau:
echoKết quả:
🤡
Cookie không lưu.
Lỗi cực phổ biến 😭
❌ 1. Quên thời gian hết hạn
setcookie(
"user",
$user
);Cookie sẽ là:
Session CookieĐóng browser.
💀
Biến mất.
❌ 2. Echo trước setcookie()
echo "Hello";
setcookie(...);👉 Header Already Sent
🤡
❌ 3. Lưu password thật
Đây là lỗi nguy hiểm nhất.
❌ 4. Không kiểm tra token trong database
Cookie tồn tại.
Nhưng database không có.
Vẫn auto login.
💀
Sự thật biết rồi, khổ lắm, nói mãi 😎
Nhiều website:
Remember Mekhông có nghĩa là:
Nhớ mãi mãiThường chỉ:
- 7 ngày
- 30 ngày
- 90 ngày
Sau đó:
Login AgainĐể tăng bảo mật.
Debug kiểu dev thật 😎
✅ 1. Kiểm tra Cookie
Chrome:
F12
Application
Cookies✅ 2. Kiểm tra thời gian hết hạn
Cookie có:
Expireskhông?
✅ 3. Kiểm tra Database Token
Có lưu chưa?
✅ 4. Test đóng browser
Đóng hoàn toàn.
Mở lại.
Xem còn login không.
Checklist chuẩn không cần chỉnh 😎
☑ Dùng Cookie
☑ Không lưu password thật
☑ Dùng token ngẫu nhiên
☑ Lưu token trong database
☑ Có thời gian hết hạn
☑ Không echo trước setcookie()
☑ Kiểm tra Cookie bằng F12
☑ Test trên host thật
FAQ nhanh
Remember Me có phải Session không?
→ Không hoàn toàn.
Thường dùng Cookie.
Có nên lưu password trong Cookie không?
→ Không 😭
Website lớn dùng gì?
→ Token.
InfinityFree có hỗ trợ Remember Me không?
→ Có.
Nếu code đúng.
Bạn có thể cũng đang gặp 😭
👉 Login thành công nhưng quay lại vẫn vào được Login Page
👉 Logout rồi nhưng Browser Back vẫn vào được
👉 Login đúng password nhưng vẫn fail
👉 Redirect sau submit form đúng cách
Tổng kết
Remember Me nghe có vẻ đơn giản:
☑ Remember MeNhưng phía sau là:
- Cookie
- Token
- Session
- Bảo mật
Nguyên tắc quan trọng nhất:
👉 Đừng lưu password thật trong Cookie.
👉 Hãy dùng token.
👉 Hãy nghĩ như Facebook chứ đừng nghĩ như... Notepad. 😄
Và hãy nhớ:
Website nhớ bạn lâu hơn cả người yêu cũ nhớ ngày sinh nhật là điều tuyệt vời.
Nhưng hacker cũng nhớ bạn lâu như vậy thì lại là chuyện khác. 😆