首页 > 解决方案 > PHP - 会话将我重定向到无限 login.php 页面

问题描述

因此,我的所有网站页面(包括 login.php)中都包含一个标头,并且在该标头中我设置了一个条件,即如果 $_SESSION['logged'] 未设置且不为空,它会自动重定向到 login.php。

if(!(isset($_SESSION['logged']) && $_SESSION['logged'] != '')) {
        redirect_to(url_for('/login.php'));
    }

问题是在我的 login.php 文件中我没有设置 $_SESSION['logged'] 因为它仅在用户单击登录后设置,并且文件 login.php 在页面加载之前无限次重定向到自身:

if($password == $user['hashed_password']) {
    $_SESSION['logged'] = $username;
    redirect_to(url_for('/staff/index.php'));
  }

第一个代码在我的头文件中,第二个在我的登录文件中。登录文件包括头文件。

标签: phpauthenticationsession

解决方案


就个人而言,我根本不会在登录页面上包含重定向检查,但如果你这样做,你应该避免在用户已经在登录页面上时触发重定向条件,例如,这样的事情应该可以工作:

$currentPage = basename($_SERVER['PHP_SELF']);

if($currentPage !== 'login.php' && empty($_SESSION['logged'])) {
    redirect_to(url_for('/login.php'));
}


// If they hit the login page but are already logged in, or submitted
// a valid password, log them in
// might need to adjust the "already logged in logic" for you use case
if(
    ($currentPage === 'login.php' && !empty($_SESSION['logged'])) ||
    $password == $user['hashed_password']
) {
    $_SESSION['logged'] = $username;
    redirect_to(url_for('/staff/index.php'));
} 

推荐阅读