Bạn đã trả phòng khách sạn, đã thanh toán đầy đủ. Thong thả đi ra ngoài để đợi xe tới đón, bỗng nhiên cô nhân viên Lễ tân hớt hải chạy ra: Anh ơi, anh chưa làm thủ tục trả phòng! Tình huống thật là trớ trêu!
Bạn làm chức năng Login.Bạn làm luôn chức năng Logout.
Test thử:
😎 Login thành công
😎 Dashboard hiện ra
😎 Logout thành công
😎 Quay về login page
Bạn thở phào nhẹ nhõm.
Sau đó bấm:
BackVà...
💀
Dashboard xuất hiện.
Bạn bắt đầu:
"Session chưa bị xóa à?"
"Logout thất bại?"
"PHP phản chủ?"
😭
Logout rồi nhưng Browser Back vẫn vào được là gì?
Đây là hiện tượng:
- User đã logout
- Session đã bị hủy
- Nhưng bấm nút Back của trình duyệt vẫn thấy trang cũ
Nguyên nhân thường không nằm ở:
❌ Session
❌ MySQL
❌ Hosting
Mà nằm ở:
👉 Cache trình duyệt
Keyword SEO:
php logout browser back
php prevent back button after logout
php session logout cache
php logout still access dashboard
php disable cache after logoutVí dụ trớt quớt 😭
Bạn login:
admin
123456Dashboard hiện ra:
Xin chào admin😎
Bạn logout.
PHP:
session_destroy();Mọi thứ có vẻ ổn.
Nhưng:
BackDashboard hiện lại.
💀
Người mới:
"Session_destroy() bị lỗi?"
Không hẳn 😅
Ví dụ đời thường 🍜
Hãy tưởng tượng:
Bạn đã trả phòng khách sạn.
Đã giao chìa khóa.
Đã check-out.
Nhưng bạn mở album ảnh điện thoại.
Vẫn thấy ảnh căn phòng.
Điều đó không có nghĩa:
Bạn vẫn thuê phòng😄
Dashboard hiện lại sau khi Back cũng tương tự.
Nó có thể chỉ là:
Ảnh chụp cũdo trình duyệt lưu cache.
Nguyên nhân phổ biến nhất 😵
❌ Browser Cache
Đây là thủ phạm số 1.
Khi bạn truy cập:
dashboard.phptrình duyệt có thể lưu lại nội dung.
Sau khi logout:
BackBrowser không tải lại server.
Nó lấy bản cache.
🤡
Dấu hiệu nhận biết 😎
Dashboard hiện ra.
Nhưng:
F5thì bị đá về login.
Nếu như vậy:
👉 Session hoạt động bình thường.
👉 Cache mới là thủ phạm.
Cách kiểm tra 😎
Dashboard hiện.
Bấm:
Ctrl + F5Nếu bị chuyển về:
login.phpthì gần như chắc chắn là cache.
Một hiểu lầm rất phổ biến 🤡
Người mới nghĩ:
session_destroy();sẽ xóa tất cả mọi thứ.
Không.
Nó chỉ xóa:
SessionKhông xóa:
Cache trình duyệt😅
Logout đúng cách 😎
logout.php
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;
?>Đây là bước đầu tiên.
Nhưng vẫn chưa đủ 😭
Nếu dashboard được cache.
Back vẫn có thể hiện nội dung cũ.
Cách xử lý chuyên nghiệp 😎
Thêm vào đầu dashboard.php
<?php
session_start();
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
?>Điều này nói với browser:
"Đừng lưu trang này."
😎
Bảo vệ Dashboard đúng cách 😎
dashboard.php
<?php
session_start();
if(!isset($_SESSION['user']))
{
header("Location: login.php");
exit;
}
?>Đây mới là lớp bảo vệ quan trọng nhất.
Cho dù:
BackHay:
Nhập URL trực tiếpHay:
BookmarkNếu Session không tồn tại:
👉 Không được vào Dashboard.
😎
InfinityFree Case 😅
Trên InfinityFree.
Nhiều bạn nghĩ:
"Host miễn phí làm lỗi logout."
Thực tế:
80% trường hợp là:
Cache trình duyệtKhông phải hosting.
Sự thật...biết rồi, khổ lắm, nói mãi 😎
Bạn thử:
Facebook
Gmail
ShopeeLogin.
Logout.
Back.
Rất nhiều trường hợp:
Trang cũ vẫn lóe lên vài mili giây.
Sau đó:
Redirect Login😎
Đó là vì:
Cache và Session là hai thứ khác nhau.
Debug kiểu dev thật 😎
✅ 1. Kiểm tra Session
Dashboard:
var_dump($_SESSION);✅ 2. Thử F5
Nếu F5 đá về Login.
Session đang hoạt động.
✅ 3. Mở tab ẩn danh
Test lại.
✅ 4. Thử Ctrl + F5
Xóa cache tạm thời.
Checklist chuẩn không cần chỉnh 😎
☑ Có session_start()
☑ Có session_unset()
☑ Có session_destroy()
☑ Có header redirect
☑ Dashboard kiểm tra Session
☑ Có no-cache header
☑ Đã test bằng F5
☑ Đã test bằng tab ẩn danh
FAQ nhanh
Logout rồi Back thấy dashboard có phải lỗi không?
→ Có thể không.
Thường là cache.
session_destroy() có đủ không?
→ Chưa chắc.
Nên kết hợp kiểm tra Session ở dashboard.
InfinityFree có gây lỗi này không?
→ Thường không.
Đa số do cache trình duyệt.
Có cần dùng Cache-Control không?
→ Nên dùng cho các trang quản trị.
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
👉 Remember Me hoạt động thế nào?
👉 Redirect sau submit form đúng cách
👉 Login đúng password nhưng vẫn fail
Tổng kết
Nếu Logout xong mà bấm Back vẫn thấy Dashboard:
👉 Đừng vội đổ lỗi cho PHP.
👉 Đừng vội đổ lỗi cho InfinityFree.
👉 Đừng vội đập bàn phím. 😄
Trong rất nhiều trường hợp:
Session đã bị hủy
Nhưng cache vẫn cònChỉ cần:
- Bảo vệ Dashboard bằng Session
- Dùng Cache-Control
- Redirect đúng cách
là website sẽ hoạt động chuyên nghiệp hơn rất nhiều.
Và người dùng sẽ không còn cảm giác:
"Mình đã logout rồi...
nhưng website vẫn chưa chấp nhận sự thật đó." 😆