检查$ _Session变量时重定向太多

时间:2017-11-22 00:26:35

标签: php session

我的页面顶部有这个脚本,可以检查有效用户是否:

if (isset($_SESSION["loggedin"])) {
    if ($_SESSION["loggedin"] == true) {
        $res = checkKey($_SESSION["uiid"]);
        if ($res > 0) {
            header("Location: admin.php");
            exit;
        } else {
            header("Location: scripts.php?action=logout");
            exit;
        }
    } else {
        header("Location: index.php");
        exit;
    }
} else {
    header("Location: index.php");
    exit;
}

但是当我尝试访问该页面时,我在Chrome中看到一个页面,说明有太多重定向。我已经在SO上看到了使用isset()来解决此类问题的其他答案,但是我已经在其中排除了其他问题。我做错了什么?

3 个答案:

答案 0 :(得分:1)

你可以做这样的事情希望这会起作用

 if (isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] == true) {
      $res = checkKey($_SESSION["uiid"]);
 } else {
      header("Location: index.php");
      exit;
 }


 if (!empty($res) && $res > 0) {
      header("Location: admin.php");
      exit;
 } else {
      header("Location: scripts.php?action=logout");
      exit;
 }

答案 1 :(得分:0)

请注意,如果用户未登录且此代码位于index.php上,您将无休止地循环访问index.php。

chrome上显示的错误意味着这是一个无限循环的重定向。

根据您的评论,这是在Admin.php上,请注意,每次“重定向”页面时都会执行此操作。所以,如果您只是在“正确”时跳过重定向,那么您的问题将得到解决

if (isset($_SESSION["loggedin"])) {
    if ($_SESSION["loggedin"] == true) {
        $res = checkKey($_SESSION["uiid"]);
        if ($res > 0) {
            // Here we assume user is an admin, so there's no need to redirect him
            // he's at the right place
        } else {
            header("Location: scripts.php?action=logout");
            exit;
        }
    } else {
        header("Location: index.php");
        exit;
    }
} else {
    header("Location: index.php");
    exit;
}

答案 2 :(得分:0)

以下是获得所需结果的代码:

 if (isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] == true) {
      $res = checkKey($_SESSION["uiid"]);
 } else {
      header("Location: index.php");
      exit;
 }


 if (empty($res) || $res < 0) {
      header("Location: scripts.php?action=logout");
      exit;
 }