如果我不希望他们能够访问某个页面,我需要重定向用户。header('Location: ../acc/login.php');
例如,有多可靠?浏览器可以忽略 302 错误,这是正确的方法吗?提前致谢!
5 回答
这在很大程度上取决于您要做什么。从技术上讲,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>
您可以依赖header()
,但请确保您调用了die()
,exit()
或者return
之后。否则,脚本将继续执行,这是潜在的安全问题。
浏览器可以忽略header('Location: ');
转发。
这就是为什么你应该总是在调用 header() 转发之后返回,这样如果浏览器不支持转发,你的其余代码就不会执行。
这是做事的正确方法。
在显示页面的其余部分之前,我将发送标头命令,然后发送退出命令“exit()”(停止在服务器上运行 php 代码)。这样,即使他们忽略了 302 重定向,用户也永远不会收到页面内容。
是的,用户可以忽略 302 重定向:
header
是 100% 可靠的。
但是header('Location: ../acc/login.php')
将在浏览器中评估到您网站上的真实位置,并且 ../acc/login.php 不会形成有效的 url!