PHP Header通过if语句重定向


PHP Header redirects falling through if statements

我有一些代码来记录已经尝试了多少次密码,看起来像这样:

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

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

到达

时,PHP不会重定向
header("location:/index.php");

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

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

我怎么能让PHP重定向,只要它命中index.php重定向?

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

EDIT:为了澄清,我已经定义了session_start();别担心。

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

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

如果您希望重定向头立即生效,则需要终止脚本,这会导致清除所有挂起的输出(包括重定向头):

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

根据PHP文档,在调用header();之后调用exit();是很好的做法

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

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

u忘记启动会话!!!!在header("location:/index.php")之后使用exit或die;不继续