PHP标头通过if语句重定向下降

Joe*_*ley 2 php redirect http-headers

我有一些代码来记录尝试了多少密码尝试,如下所示:

<?php
/* Access denied */
$_SESSION['error'] = "invalidlogin";

if (isset($_SESSION['tries']))
{
    if ($_SESSION['tries'] == 5)
    {
        //TODO: Redirect somewhere nicer and more descriptive
        header("location:/index.php");
    }
    else
    {
        $_SESSION['tries']++;   
    }
}
else
{
    $_SESSION['tries'] = 0; 
}

header("location:/login.php");
?>
Run Code Online (Sandbox Code Playgroud)

我知道这是数到五,然后停止因为我在测试的login.php它呼应$ _SESSION ["错误"]

PHP在点击时永远不会重定向

header("location:/index.php");
Run Code Online (Sandbox Code Playgroud)

但它总是继续前进,然后重定向到

header("location:/login.php");
Run Code Online (Sandbox Code Playgroud)

一旦它到达index.php重定向,我怎样才能让PHP重定向?

我只是在index.php重定向后设置一个布尔值并在login.php重定向上检查它吗?

编辑:为了澄清,我已经定义了session_start(); 别担心.

HBu*_*itz 8

header("location:/index.php");
exit();
Run Code Online (Sandbox Code Playgroud)


Mar*_*c B 5

重定向仅在发送到客户端浏览器并且浏览器发起新请求(终止当前请求)后才生效。简单地调用 header() 不会启动重定向 - 您的脚本将继续运行,直到它正常退出,连接关闭并且网络服务器关闭脚本,或者您明确终止执行。

如果您希望重定向标头立即生效,则需要终止脚本,这会导致刷新任何挂起的输出(包括重定向标头):

header("Location: ...");
exit();
Run Code Online (Sandbox Code Playgroud)