在PHP中的“header()”函数之后执行命令吗?

时间:2010-10-11 11:12:31

标签: php header

例如,在这里:

<?php
    session_start();

    if (!isset($_SESSION['is_logged_in'])) {
        header("Location: login.php");
        die();
    }
?>
<Some HTML content>

这里真的需要die()吗?

4 个答案:

答案 0 :(得分:4)

  

这里真的有必要死吗?

它是:否则,客户端仍将在响应正文中获取HTML代码。标题要求客户端终止并转到新页面,但它不能强制它。

客户端可以随时继续收听响应,并在之后接收所有输出,这是一个致命的安全漏洞,例如:在保护登录区域中的敏感数据时。

答案 1 :(得分:1)

是的,die()是必要的。对header("Location: some-location.php")的调用会将指定的标头(在本例中为302重定向)发送到浏览器;但它不会终止脚本。如果redirect语句之后的行包含可能无意中执行的PHP代码,则变得更加重要。因此,如果要发送重定向标头并中止任何进一步处理,您必须致电dieexitreturn或任何其他类似的构造。

请注意,在发送重定向标头后,可以执行进一步处理

答案 2 :(得分:0)

是。简单地生成标头,即使是Location标头,也不会终止当前脚本。 HTML输出将在例如HTML中显示数据包嗅探器。

答案 3 :(得分:0)

我发现:http://www.figured-it-out.com/figured-out.php?sid=181

所以根据这一点,似乎某些浏览器只是停止接收html内容并直接重定向到新页面,其他浏览器(如IE)仍在等待,直到页面加载准备就绪。