2

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

4

5 回答 5

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>
于 2012-09-22T18:07:21.413 回答
4

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

于 2012-09-22T17:59:36.560 回答
0

浏览器可以忽略header('Location: ');转发。

这就是为什么你应该总是在调用 header() 转发之后返回,这样如果浏览器不支持转发,你的其余代码就不会执行。

这是做事的正确方法。

于 2012-09-22T17:59:45.653 回答
0

在显示页面的其余部分之前,我将发送标头命令,然后发送退出命令“exit()”(停止在服务器上运行 php 代码)。这样,即使他们忽略了 302 重定向,用户也永远不会收到页面内容。

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

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

于 2012-09-22T18:01:39.793 回答
-1

header是 100% 可靠的。

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

于 2012-09-22T18:02:46.513 回答