我不认为HTTP_REFERER
是你认为它是。也就是说,它是用户从其中链接到当前页面的页面。然而,这是非常不可靠的,因为我们依靠用户的浏览器来正确报告这个值。
我会建议我认为你需要的选项,除了我能想到的唯一一个可能没有意义...(检查url是否与当前脚本不匹配)。所以我不明白你在做什么。
正如所承诺的几种方法可以做到你想要达到的目标:
首先,我不喜欢这一切的解决方案,真正认为这是丑陋,但它是一个最接近于你在哪里试图去做。
invalid.php
require 'login.php'; // we include the file instead of referring to it
的login.php
if ($_SERVER['SCRIPT_NAME'] == 'invalid.php')
{
// do whatever
}
之间你做了什么和我所做的用户将是这里的地址栏将显示的主要区别在于你”重新在invalid.php而不是其他地方。这也意味着清爽不会使信息消失。
在我看来,一个更好的解决方案是:
在脚本中记录了一个用户(检查数据库和一切):
if (!valid_login()) // pseudo-code, obviously
{
$_SESSION['invalid_login'] = true;
header('Location: login.php');
// previously, we had something like this instead of the two lines above:
// header('Location: invalid.php');
}
中的login.php
if (isset($_SESSION['invalid_login']) && $_SESSION['invalid_login'])
{
$_SESSION['invalid_login'] = false;
// do whatever
}
当然,这应该通过适当的会话设施完成,例如在这两个文件中启动会话。您可以使用会话变量来包含文件并使用普通变量或通过头部请求发送GET变量,但这两种解决方案都存在一个共同的问题:刷新不会使消息消失。但是,如果您要将代码从上面两个文件的顶层文件移动到login.php
(如果它不在那里,我不知道实际上是什么文件...),您可以再次使用普通变量而不是会话变量,并有一个解决方案,在这个解决方案中,刷新使它消失。在这种情况下,您可能会争辩说,您的商业逻辑和演示文件混乱,但有解决方案(如将其保存在单独的文件中,并将其包含到login.php
中,将html移动到另一个文件并包含该文件到login.php
或这两者
你的脚本看起来不错试试echo $ _SERVER ['HTTP_REFERER']看看它的值是多少 – bumperbox
你应该尝试一些基本的调试,为什么不输出'$ ref'的值看看它是什么? – meagar
那么,如果你使用'header()',你永远不会看到任何东西,因为它只是在重定向之前输出div。但我不知道我明白这个问题100% –