【问题标题】:PHP Header redirects falling through if statementsPHP Header 重定向通过 if 语句
【发布时间】:2011-08-24 16:28:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php redirect http-headers


    【解决方案1】:
    header("location:/index.php");
    exit();
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        根据PHP Docs,最好在调用header(); 之后再调用exit();

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 我知道,这就是 todo 存在的原因,现在只是快速写下
          【解决方案5】:

          你忘记开始会话了!!!! 在 header("location:/index.php"); 之后使用 exit 或 die剩下的就不要继续了

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多