PHP header();可靠性

时间:2012-09-22 17:57:42

标签: php redirect http-status-code-302

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

5 个答案:

答案 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重定向:

http://www.webmasterworld.com/html/3604591.htm

答案 4 :(得分:-1)

header 100%可靠。

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