Thứ Hai, 8 tháng 6, 2026

Login thành công nhưng quay lại vẫn vào được Login Page

Đã 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 khi thấy...hình như mọi thứ ổn.


Rồi thì "rảnh quá" thử chơi: Bấm vào nút Back trên trình duyệt


hoặc:

gõ trực tiếp login.php


Và...Trang Login hiện ra.


Người dùng:


"Ủa? Mình đã login rồi mà? Sao bắt login nửa vậy trời!"


Website...ậm ừ:

"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



Ví 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.php

Trang login vẫn hiện ra sừng sững...


User lúc này có cảm giác...hoang mang:

Đăng nhập rồi....mà chưa hoàn toàn đăng nhập



Ví dụ thực tế 

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? 

Lính mới thường chỉ kiểm tra:

dashboard.php


Ví 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.php


Kết quả:

Dashboard được bảo vệ

Login page thì không



Cách lính 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 login


Luồng đúng 

Login

↓

Dashboard

↓

login.php

↓

Redirect dashboard



Một lỗi rất phổ biến 

Lính mới nghĩ:

"Đã bảo vệ dashboard rồi."


Đúng. Nhưng:

Dashboard

và

Login Page

là 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ả:

$_SESSION


không hoạt động.



Lỗi thứ ba: Sai tên Session

Login:

$_SESSION['username'] = $username;


Login page:

if(isset($_SESSION['user']))


PHP:

username ≠ user



Lỗi thứ tư: Session bị mất trên host

Localhost: Mọi thứ chạy như xe công thức 1


InfinityFree hoặc một hosting nào đó: Mất session


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:

  • Facebook
  • Gmail
  • Shopee
  • Lazada


Khi bạn login rồi:

facebook.com/login

Sẽ không hiện form login nữa.


Họ lập tức:

Redirect

về 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 "xịn sò"

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 

Session PHP không hoạt động

Header Already Sent

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.php


thì 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".