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

时间:2011-08-24 16:28:12

标签: 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");
?>

我知道它数到五,然后停止因为我通过在login.php上回显$ _SESSION ['error']来测试它。

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

header("location:/index.php");

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

header("location:/login.php");

如何在遇到index.php重定向后立即让PHP重定向?

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

编辑:为了澄清,我已经定义了一个session_start();不要担心。

5 个答案:

答案 0 :(得分:8)

header("location:/index.php");
exit();

答案 1 :(得分:4)

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

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

header("Location: ...");
exit();

答案 2 :(得分:1)

按照PHP Docs的优良做法,在致电exit();后致电header();

答案 3 :(得分:0)

首先,你的整个方法存在缺陷。您不应该在登录失败时进行重定向,这可能会导致安全问题。您应该确保您的脚本在同一请求中包含正确的子页面。

虽然从技术上讲,你的问题的答案是,如上所述,使用exit()。

答案 4 :(得分:0)

你忘了开始会议!!!! 在header之后使用exit或die(“location:/index.php”);不要继续休息