为什么我必须在PHP中通过头('Location ..')重定向后调用'exit'?
你知道,如果你想在PHP中重定向一个用户,你可以使用头函数:
header('Location: http://smowhere.com');  众所周知,放置exit;也是一个好的做法exit; 在header调用之后,防止执行其他的php代码。 所以我的问题是:可以有效地执行标题位置调用后的代码? 在哪种情况下? 恶意用户是否可以完全忽略header('Location..')调用? 怎么样? 
标题位置调用之后的代码是否可以被有效地执行?
 是的,总是。  header只是要求浏览器重定向的一行数据。 页面的其余部分仍然由PHP提供,可以通过简单地阻止header命令执行来由客户端查看。 
 比如说,像wget这样的命令行客户端就足够简单了,只要告诉它不要遵循重定向。 
 底线:如果你不阻止它,即使在header调用之后,PHP也会发出全身的信号。 该机构完全可用的接收方没有任何特殊的黑客技能。 
 如果你重定向,但你die() / exit() 代码总是执行和显示 。 
以下面的例子:
admin.php的:
 if (authenticationFails) { // redirect and don't die } // show admin stuff 
如果您不确定在位置标题之后结束执行,则每个用户都将获得访问权限。
  header()指示PHP应该发送一个HTTP头…在发送HTTP头时。 
 而且,当你将这个调用写到header()时,这些不是立即发送的,而是当它们发送的时候(通常,当PHP需要开始发送响应的主体时 – 这可能比你想象的要晚,当output_buffering是使用) 。 
 所以,如果你只是调用header() ,绝对保证在这个语句之后编写的代码不会被执行 – 除非你指出它不能,通过使用exit / die 。 
 用户可以忽略Location标题,如果他想要的话; 但是它不会改变任何事情,因为header()调用之后的代码可能会或可能不会被执行:这个问题是服务器端的。 
PHP代码在一个header()之后将会运行。 有时候,这是必需的,就像php.net上的例子所示。 为了确保它不是,您完全结束程序流程。
re:header-location调用后的代码能否被有效地执行?
是的,如果你不关闭脚本。
re:在哪种情况下?
在任何情况下。
恶意用户能否完全忽略标题('Location ..')的呼叫?
不,这将使得用户在这件事上没有发言权。
如果没有退出调用,脚本将终止的确切点/时间将归结为两个因素:
- 客户端浏览器响应重定向的速度有多快
- 剩下的脚本要执行多少时间。
假设浏览器立即在看到“位置”标题的时刻开始重定向操作。 这意味着它将关闭重定向到的连接,所以它可以开始连接到新的位置。 这通常意味着Web服务器将终止重定向脚本。 然而,从服务器 – >客户端发送头文件需要很长时间,并且从客户端 – >服务器进行的TCP链接关闭过程是脚本可以继续运行的时间。