Đã bao giờ bạn trải qua cảm giác khi bạn đã check in phòng khách san, đã ngủ một đêm, sáng hôm sau ra ngoài dạo chơi, trưa về hớn hở bước vào khách sạn, bỗng nhiên bị anh bảo vệ khăng khăng bắt tới quầy làm thủ tục check in...
Bạn làm xong chức năng login.Test thử:
😎 Nhập tài khoản
😎 Nhập mật khẩu
😎 Đăng nhập thành công
😎 Vào được trang quản trị
Bạn vui mừng.
Rồi thì "rảnh quá" thử chơi:
Backhoặc:
gõ trực tiếp login.phpVà...
💀
Trang Login hiện ra.
Người dùng:
"Ủa?"
"Tôi đang login rồi mà?"
Website:
"Tôi cũng không chắc nữa...kệ, làm lại...cho chắc" 😅
Login thành công nhưng vẫn vào được Login Page là gì?
Lỗi này xảy ra khi:
- Session đã tồn tại
- User đã đăng nhập
- Nhưng trang login không kiểm tra Session
Kết quả:
👉 Người dùng vẫn truy cập được trang login.
Rất phổ biến với:
- PHP thuần
- Người mới học Session
- Website upload lên host thật
- InfinityFree
Keyword SEO:
php login page after login
php prevent access login page
php session redirect login
php login redirect dashboard
php already logged in redirectVí dụ trớt quớt 😭
Bạn login thành công.
PHP lưu:
$_SESSION['user'] = 'admin';Sau đó vào:
dashboard.php😎
Nhưng nếu gõ:
login.phpTrang login vẫn hiện ra sừng sững...
🤡
User lúc này có cảm giác:
Đăng nhập rồi
mà chưa hoàn toàn đăng nhập😅
Ví dụ đời thường 🍜
Hãy tưởng tượng:
Bạn đã check-in khách sạn.
Nhận chìa khóa.
Nhận phòng.
Nhưng lễ tân vẫn bắt bạn:
Đứng xếp hàng check-in lần nữa😭
Đó chính là cảm giác của người dùng khi gặp lỗi này.
Vì sao chuyện này xảy ra? 😵
Người mới thường chỉ kiểm tra:
dashboard.phpVí dụ:
session_start();
if(!isset($_SESSION['user']))
{
header("Location: login.php");
exit;
}Rất đúng.
Nhưng lại quên kiểm tra:
login.phpKết quả:
Dashboard được bảo vệ
Login page thì không🤡
Cách người mới thường làm 😭
login.php
<form method="post">
...
</form>Hết.
😅
Không kiểm tra gì cả.
Cách đúng 😎
Ngay đầu file:
<?php
session_start();
if(isset($_SESSION['user']))
{
header("Location: dashboard.php");
exit;
}
?>Lúc này:
Đã login
↓
Truy cập login.php
↓
Tự động chuyển dashboard😎
Luồng sai 😭
Login
↓
Dashboard
↓
login.php
↓
Vẫn hiện form loginLuồng đúng 😎
Login
↓
Dashboard
↓
login.php
↓
Redirect dashboardMột lỗi rất phổ biến 🤡
Người mới nghĩ:
"Đã bảo vệ dashboard rồi."
Đúng.
Nhưng:
Dashboardvà
Login Pagelà hai vấn đề khác nhau.
Website chuyên nghiệp phải xử lý cả hai.
Lỗi thứ hai: Session chưa start 😭
Ví dụ:
if(isset($_SESSION['user']))
{
...
}Nhưng quên:
session_start();Kết quả:
$_SESSIONkhông hoạt động.
🤡
Lỗi thứ ba: Sai tên Session
Login:
$_SESSION['username'] = $username;Login page:
if(isset($_SESSION['user']))🤡
PHP:
username ≠ userLỗi thứ tư: Session bị mất trên host
Localhost:
😎
InfinityFree:
💀
Nguyên nhân có thể:
- Session cấu hình lỗi
- Header Already Sent
- Có output trước session_start()
- Cache trình duyệt
Một sự thật...biết rồi, khổ lắm, nói mãi😎
Rất nhiều website lớn:
- Gmail
- Shopee
- Lazada
Khi bạn login rồi:
facebook.com/loginSẽ không hiện form login nữa.
Họ lập tức:
Redirectvề trang chính.
Đó chính là cách hoạt động chuyên nghiệp.
Code mẫu đúng 😎
login.php
<?php
session_start();
if(isset($_SESSION['user']))
{
header("Location: dashboard.php");
exit;
}
?>
<form method="post">
...
</form>Debug kiểu dev thật 😎
✅ 1. Kiểm tra Session
var_dump($_SESSION);✅ 2. Kiểm tra session_start()
Có nằm đầu file không?
✅ 3. Kiểm tra tên Session
Ví dụ:
$_SESSION['user']và
$_SESSION['username']có giống nhau không?
✅ 4. Kiểm tra Redirect
Có:
header(...)không?
Checklist "chuẩn không cần chỉnh"
☐ Đã dùng session_start()?
☐ Đã lưu Session sau login?
☐ login.php có kiểm tra Session?
☐ Đã dùng header() redirect?
☐ Có exit sau header()?
☐ Tên Session có thống nhất?
☐ var_dump($_SESSION) đã kiểm tra chưa?
FAQ nhanh
Có bắt buộc redirect khỏi login page không?
→ Không.
Nhưng nên làm.
Website lớn có làm vậy không?
→ Có.
Hầu như tất cả đều làm.
Chỉ bảo vệ dashboard có đủ không?
→ Không.
Nên xử lý cả login page.
InfinityFree có gây lỗi này không?
→ Thường không.
Nguyên nhân chủ yếu nằm ở Session hoặc code.
Bạn có thể cũng đang gặp 😭
👉 Login đúng password nhưng vẫn fail
👉 Redirect sau submit form đúng cách
👉 Logout rồi nhưng Browser Back vẫn vào được
👉 Remember Me hoạt động thế nào?
Tổng kết
Nếu người dùng đã đăng nhập thành công mà vẫn truy cập được:
login.phpthì thường không phải Session bị lỗi.
Mà là:
👉 Trang Login chưa kiểm tra Session.
Chỉ cần thêm vài dòng code redirect là website sẽ hoạt động chuyên nghiệp hơn rất nhiều.
Và người dùng sẽ không phải "đăng nhập lại để chứng minh rằng mình đã đăng nhập". 😄