为什么我必须在PHP中通过标题('Location ..')重定向后调用'exit'?

Nic*_*ini 54 php redirect location header

您知道如果要在PHP中重定向用户,可以使用标头功能:

header('Location: http://smowhere.com');
Run Code Online (Sandbox Code Playgroud)

众所周知,exit;header调用之后也放置一个很好的做法,以防止执行其他php代码.所以我的问题是:标头位置调用后的代码能否有效执行?在哪些情况下?恶意用户能否完全忽略该header('Location..')呼叫?怎么样?

Pek*_*ica 58

可以有效执行header-location调用后的代码吗?

是的,总是.这header只是一行要求浏览器重定向的数据.页面的其余部分仍然由PHP提供,客户端可以通过简单地阻止header命令执行来查看.

这很容易与命令行客户端一样wget,例如,只是告诉它不要遵循重定向.

一句话:如果你不阻止它,PHP即使在header通话后也会发出全身.没有任何特殊的黑客技能,该机构完全可供收件人使用.


Ali*_*xel 25

如果您重定向但是没有die()/ exit() 代码总是被执行并显示.

请看以下示例:

admin.php的:

if (authenticationFails)
{
    // redirect and don't die
}

// show admin stuff
Run Code Online (Sandbox Code Playgroud)

如果您不确定在位置标题之后结束执行,则每个用户都将获得访问权限.


Pas*_*TIN 8

header() 指示PHP应该发送HTTP标头...当发送HTTP标头时.

当你编写对header()的调用时,这些并不是立即发送的,而是在发送它们的时候(通常,当PHP需要开始发送响应的主体时 - 这可能比你想象的要晚,什么时候output_buffering被启用).

所以,如果你只是打电话header(),绝对保证不会执行在此声明之后写的代码 - 除非你通过使用exit/ 表示它不能表示die.

如果用户可以忽略Location标题; 但它不会改变调用header()可能或可能不执行后代码的事实:那个问题是服务器端.