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