例如,在这里:
<?php
session_start();
if (!isset($_SESSION['is_logged_in'])) {
header("Location: login.php");
die();
}
?>
<Some HTML content>
这里真的需要die()
吗?
答案 0 :(得分:4)
这里真的有必要死吗?
它是:否则,客户端仍将在响应正文中获取HTML代码。标题要求客户端终止并转到新页面,但它不能强制它。
客户端可以随时继续收听响应,并在之后接收所有输出,这是一个致命的安全漏洞,例如:在保护登录区域中的敏感数据时。
答案 1 :(得分:1)
是的,die()
是必要的。对header("Location: some-location.php")
的调用会将指定的标头(在本例中为302重定向)发送到浏览器;但它不会终止脚本。如果redirect语句之后的行包含可能无意中执行的PHP代码,则变得更加重要。因此,如果要发送重定向标头并中止任何进一步处理,您必须致电die
,exit
,return
或任何其他类似的构造。
请注意,在发送重定向标头后,可以执行进一步处理。
答案 2 :(得分:0)
是。简单地生成标头,即使是Location
标头,也不会终止当前脚本。 HTML输出将在例如HTML中显示数据包嗅探器。
答案 3 :(得分:0)
我发现:http://www.figured-it-out.com/figured-out.php?sid=181
所以根据这一点,似乎某些浏览器只是停止接收html内容并直接重定向到新页面,其他浏览器(如IE)仍在等待,直到页面加载准备就绪。