【问题标题】:php - Why should I call exit() after calling Location: header?php - 为什么我应该在调用 Location: 标头后调用 exit()?
【发布时间】:2017-12-01 08:07:34
【问题描述】:

Stack Over Flow 中有很多类似的问题,如php - Should I call exit() after calling Location: header?do i need to use exit after header("Location: http://localhost/...");?

他们的答案如下。

你绝对应该。否则脚本执行不 终止。单独设置另一个标头不足以重定向。

--

你应该调用 exit() 因为 header() 不会自动停止 执行脚本 - 或者如果它执行(老实说我不是 100% 的), 它绝对不会立即停止脚本。

但我不明白有人如何跳过或绕过像 header('Location: http://www.example.com/login.php') 这样的代码?有人怎么做到的?因为这是一个PHP代码。此代码在服务器中运行。如果有人可以跳过/绕过此代码,为什么他们也不能跳过/绕过exit()

【问题讨论】:

  • 通常如果我想强制重定向,我会这样做:die(header('Location: redirect_url'));,因为重定向下面的任何编码都会被执行。服务器处理比重定向更快。
  • 这取决于我猜的代码结构以及代码的访问方式。如果有人使用 curl 通过互联网访问代码,那么他们可能没有遵循重定向
  • 没有必要..,但是如果你使用退出,当你重定向时下面的代码不会被执行。
  • @Nawin 是必要的。是缪斯。阅读stackoverflow.com/a/44794420/7978484。很难相信作为一名首席 PHP 开发人员并拥有 3 年以上的经验,您对此一无所知。

标签: php redirect http-headers


【解决方案1】:

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

如果你不阻止它,PHP 会在一个 header 调用之后发送整个 body。该正文对收件人完全可用。

【讨论】:

  • 谢谢,现在我明白了。但是有人如何阻止标头命令执行?
  • 可以通过像 wget 这样的命令行客户端阻止它,只需告诉它不要跟随重定向。
猜你喜欢
  • 2011-04-02
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多