2012-09-22 64 views
1

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

+3

如果不退出该重定向后,脚本,搜索引擎可以忽略它和索引以下内容。 – DCoder

+4

302不是错误,它是正面的回应码。 – Ozerich

+0

这是正确的方式,所有现代浏览器都支持它。 – Serge

回答

4

这取决于你想要做的很多事情。技术上说,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> 
4

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

+0

依靠什么意思? – hakre

+0

即使浏览器以某种方式阻止,调用'exit()'也会停止脚本,所以没有安全问题。 –

+1

仅适用于*某些*前提条件,并且OP没有显示太多代码:http://stackoverflow.com/a/12546392/367456 – hakre

0

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

这就是为什么你应该总是返回一个header()转发后,所以如果浏览器不遵守转发,你的代码的其余部分不会执行。

这是做事情的正确方法。

0

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

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

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

+0

谢谢 - 您的回答解释了很多。谢谢! – Andrey

0

header是100%可靠。

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