快速提问,我注意到在我的一些标题导演中,我在处理标题时遇到了一些延迟。使用标题后使用返回标准?此外,如果您在页面上使用标题,则不希望直接访问,例如处理页面将返回;即使没有直接访问页面,也停止处理? IF返回是一个好主意,最好使用exit()吗?
答案 0 :(得分:10)
header("Location: ......"); exit;
是一种相当普遍的模式。
答案 1 :(得分:7)
在致电header
后,您需要提供return;
,但我知道有些人在exit;
致电后会使用供应惯例header
确保下面的代码在重定向期间不会执行。
答案 2 :(得分:3)
请注意,您可以将header()
用于除位置之外的其他内容:重定向:
header("Content-type: image/jpeg"); // for example
在标题重定向之后退出的原因是,header()
重定向之后的任何内容输出(很可能)都不会被浏览器看到。
更重要的是,您不希望在header()
重定向后执行任何代码,因此在重定向后调用exit()
是一种良好的做法。
答案 3 :(得分:2)
当你发送标题时,它只是客户端(浏览器)的一个建议,你认为他们应该请求另一个网址。但是,没有什么可以阻止他们不遵循你的建议。如果您的服务器继续向它们提供数据,它们可以继续从当前URL读取更多数据。这就是为什么你通常会看到在发送重定向头之后调用exit()的php代码,因为如果你停止输出更多的数据,他们就没有什么可读的了。
除了阻止他们阅读非预期数据外,还有其他原因:
对于脚本的其余部分来说,继续执行,浪费资源可能毫无意义。
如果脚本要继续(例如,缺少变量或数据库连接失败),可能会发生运行时错误。
如果脚本要继续(例如,用户输入验证/身份验证失败),可能会发生逻辑错误。
答案 4 :(得分:1)
由客户决定header("Location: ...")
之后要做什么。
header()
之后的任何代码都将被执行。在标题之后放置exit();
是一种安全措施,是保护您网站所必需的。
如果你在header("Location: ...")
之后有一些糖果,浏览器唯一要做的就是忽略这个请求。然后就会明白这一天。使用exit();
,您将停止执行该页面,希望您的应用程序没有其他攻击媒介!