重定向过多-身份验证流程

时间:2019-07-25 12:48:25

标签: php authentication session-variables

我的身份验证流程如下: 我在下面设置了身份验证以允许访问。

<?php
session_start();
$username = $_POST["username"];
$password = $_POST["password"];

function check($username, $password){
    $_SESSION['Authenticated'] = true;
    $_SESSION['Expires'] = time() + 3600;
    $_SESSION['username'] = $username;
    header("location: ../index");
    exit;
    };
 };

check($username, $password);
?>

在每个需要身份验证的页面上,我包括:

<?php
session_start();
require '../scripts/check-auth.php';
?>

哪个叫这个脚本:

<?php
$page = $_SERVER['REQUEST_URI'];
if(isset($_SESSION['Authenticated']) && $_SESSION['Authenticated']){
    if($_SESSION['Expires']< time()){
        $_SESSION["status_code"] = "401";
        header('Location: ../views/login.php');
        exit;   
    }
    $_SESSION['Expires'] = time() + 3600;
    if($page == '/views/login.php'){
        header('Location: ../index.php');
        exit;
    }
} else {
    $_SESSION["status_code"] = "401";
    if($page != '/views/login.php'){
        header('Location: ../views/login.php');
        exit;
    }
};

?>

该流程可很好地用于初始身份验证,但是如果该流程到期,然后重新登录,则会产生错误,重定向次数过多。 有人能够协助吗?

1 个答案:

答案 0 :(得分:1)

问题出在$customer->cascades->external_id; 中,由于您仍然要将用户重定向到登录页面,因此您需要取消设置变量:

check-auth.php

如果您不想取消设置变量,只需删除<?php $page = $_SERVER['REQUEST_URI']; if(isset($_SESSION['Authenticated']) && $_SESSION['Authenticated']){ if($_SESSION['Expires']< time()){ unset($_SESSION['Authenticated']); unset($_SESSION['Expires']); $_SESSION["status_code"] = "401"; header('Location: ../views/login.php'); exit; } $_SESSION['Expires'] = time() + 3600; if($page == '/views/login.php'){ header('Location: ../index.php'); exit; } } else { $_SESSION["status_code"] = "401"; if($page != '/views/login.php'){ header('Location: ../views/login.php'); exit; } }; ?> 的行并将其替换为以下行:

unset()

这应该解决该问题。