使用php session和cookie重定向浏览器错误[header]


Redirecting browser error [header] with php session and cookie

我有一个奇怪的问题,我的头重定向成功后password_verify()这是一个部分从login.php

login。

            $sql = "SELECT * FROM formular WHERE email='".$emailUsername."' OR username='".$emailUsername."'";
            $result = $conn->query($sql);
            $row = $result->fetch_assoc();
            if (password_verify($password, $row["hash"])) {
                if (isset($_POST["remember_me"])) {
                    $_SESSION["remember_me"] = $emailUsername;
                    setcookie('remember_me', md5($emailUsername . time()));
                    $stmt = $conn->prepare("INSERT INTO sessions (id) VALUES (?)");
                    $stmt->bind_param("s", $_COOKIE["remember_me"]);
                    $stmt->execute();
                    if ($stmt->affected_rows) {
                    }
                    $stmt->close();
                    $conn->close();
                }
                $_SESSION = array(
                        "login" => true,
                        "data" => array(
                                "username" => $row["username"],
                                "email" => $row["email"],
                                "time" => time() +10*5
                        )
                );
                header('Location: ../home/userarea.php');
                exit();
            }
            else {
                $errorField2 = "<div class='"alert alert-danger'">".
                    "<strong>Whoops!</strong> Wrong entries!".
                    "</div>";
            }

现在,在每个页面的顶部,我都有一个文件,检查会话是否设置,然后将用户重定向到该页。在loginpage上,我有一个 memorber_me复选框,应该在成功输入后设置一个cookie,以便用户不必再次登录并自动重定向他到userarea.php。

在我的情况下,任何用户都可以看到userarea.php

bootstrap.php

ob_start();
if (isset($_SESSION["login"])) {
    if ($_SESSION["data"]["time"] >= time()) {
        if(isset($_COOKIE["remember_me"])) {
            header('Location: ../home/userarea.php');
            exit();
        }
    } else {
            header('Location: ../log_reg/login.php');
            exit();
    }
} else {
    //This line here is running my browser into the redirecting error "Page could not be loaded: The called website redirects the request so that it can never be terminated."
    #header('Location: ../log_reg/login.php');
    #exit();
}
ob_end_flush();

这个文件应该设置一个cookie,如果remember_me已设置,如果用户刚刚登录,没有检查remember_me,则设置一个session我的浏览器允许设置cookie,所以这不是问题。

你的问题在

isset($_SESSION["login"])

在一个无限循环中,所以重定向不会被执行
下面是正确的处理方法:

ob_start();
if (isset($_SESSION["login"])) {
    if ($_SESSION["data"]["time"] >= time()) {
        if(isset($_COOKIE["remember_me"])) {
            header('Location: ../home/userarea.php');
            exit();
        }
    } else {
        header('Location: ../log_reg/login.php');
        exit();
    }
} else {
    if (basename($_SERVER["REQUEST_URI"]) == "login.php"){
    }
    else {
        header('Location: ../log_reg/login.php');
    }
}
ob_end_flush();