PHP header();可靠性

PHP header();可靠性,php,redirect,http-status-code-302,Php,Redirect,Http Status Code 302,如果我不想让用户访问某个页面,我需要重定向用户。header('Location:../acc/login.php')的可靠性如何例如?浏览器可以忽略302个错误,这是正确的方法吗?提前谢谢 您可以依赖于header(),但请确保在此之后调用了die()、exit()或return。否则,脚本将继续执行,这是潜在的安全问题。浏览器可以忽略标题('Location:')转发 这就是为什么在调用header()forward之后,您应该始终返回,以便在浏览器不支持转发的情况下,代码的其余部分不会执行

如果我不想让用户访问某个页面,我需要重定向用户。
header('Location:../acc/login.php')的可靠性如何例如?浏览器可以忽略302个错误,这是正确的方法吗?提前谢谢

您可以依赖于
header()
,但请确保在此之后调用了
die()
exit()
return
。否则,脚本将继续执行,这是潜在的安全问题。

浏览器可以忽略
标题('Location:')转发

这就是为什么在调用header()forward之后,您应该始终返回,以便在浏览器不支持转发的情况下,代码的其余部分不会执行


这是正确的方法。在显示页面的其余部分之前,我先发送header命令,然后发送exit命令“exit()”(停止在服务器上运行php代码)。这样,即使用户忽略302重定向,也不会向其发送页面内容

是的,用户可以忽略302重定向:


表头
100%可靠


但是,
标题('Location:../acc/login.php')
将在浏览器中评估到您网站上的真实位置,并且../acc/login.php将不会形成有效的url

这在很大程度上取决于你想做什么。从技术上讲,
header()
有点可靠。只是有些,因为很多PHP用户都有问题,无法让它工作

如果输出已经发送到浏览器,PHP将阻止它工作。一个极端的例子:

<protected page content here>
<?php
    header('Location: login-first.php');
    exit();
?>

这根本行不通。您最终甚至会看到带有警告的错误消息

标题-按设计-需要在任何其他内容(响应正文)之前发送。如果响应主体已经启动,并且PHP在这种情况下无法帮助您,则无法再发送它们

但是,如果在响应主体之前发送标题,则该函数将起作用。此外,搞砸事情的风险显然也不再那么严重了:

<?php
    header('Location: login-first.php');
    exit();
?>
<protected page content here>


如果重定向后不退出脚本,搜索引擎可以忽略它并索引以下内容。302不是错误,它是积极响应代码。这是正确的方式,所有现代浏览器都支持它。即使浏览器以某种方式阻止它,调用
exit()
也会停止脚本,所以没有安全问题。只针对某些先决条件,OP没有显示太多代码:谢谢-您的答案解释了很多。谢谢如果客户端尊重Location头,那么头都是好的,否则您将陷入麻烦。大多数爬虫不尊重头。