我们使用header();
重定向用户。
这也常用于日志系统中。
我已经看到很多新的PHP开发人员使用 Code 1 ,但是因为你可以bypass the header redirect这是非常糟糕的安全代码。
问题:我很好奇知道为什么官方PHP团队无法将exit()
添加到header()
内部?
如果他们添加了它,那么header()在默认情况下也是明智的....但是目前我们需要添加exit()
....
代码01
if(if logging is fail){
header("Location: http://example.com/erro.php");
}
代码02
if(if logging is fail){
header("Location: http://example.com/erro.php");
exit();
}
答案 0 :(得分:3)
设计功能时使用的核心原则是单一责任原则。这意味着函数必须执行一个操作并且做得很好。
header
函数遵循此原则。 设置标题。它并不关心接下来会发生什么,这不是它的责任。这就是函数header
将从不结束脚本的原因。
如果您愿意 - 您可以创建自己的功能:
function setLocationAndExit($location) {
header('Location: ' . $location);
exit();
}
并在任何地方使用它。
答案 1 :(得分:0)
因为有时您可以使用header()
而无需重定向,但可以稍微调整一下您的请求。
例如,您可以对您的服务器说'嘿,请不要将我的页面放在缓存中"对于您希望在未记录的情况下无法访问的路由。以Laravel为特色:
<?php
namespace App\Http\Middleware;
use Closure;
class DisableCache
{
public function handle($request, Closure $next)
{
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
return $next($request);
}
}
?>