我有一些代码可以记录尝试过的密码尝试次数,如下所示:
<?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();不要担心。
答案 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”);不要继续休息