我应该使用“返回”吗?在标题()之后?

时间:2010-03-30 20:21:09

标签: php

快速提问,我注意到在我的一些标题导演中,我在处理标题时遇到了一些延迟。使用标题后使用返回标准?此外,如果您在页面上使用标题,则不希望直接访问,例如处理页面将返回;即使没有直接访问页面,也停止处理? IF返回是一个好主意,最好使用exit()吗?

5 个答案:

答案 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();,您将停止执行该页面,希望您的应用程序没有其他攻击媒介!