我不认为这HTTP_REFERER
是你认为的那样。即,它是用户从其跟随到当前页面的链接的页面。但是,它非常不可靠,因为我们依赖用户的浏览器来正确报告这个值。
我会建议我认为你需要的选项,除了我能想到的唯一一个可能没有意义......(检查网址是否与不是当前脚本的网址匹配)......所以我做了看不到您要做什么。
正如承诺的那样,有几种方法可以实现您想要实现的目标:
首先,我根本不喜欢这个解决方案,并且真的认为它很丑,但它是最接近你想要做的事情的解决方案。
无效的.php
require 'login.php'; // we include the file instead of referring to it
登录.php
if ($_SERVER['SCRIPT_NAME'] == 'invalid.php')
{
// do whatever
}
您所做的与我为用户所做的主要区别在于,此处的 url 栏将显示您位于 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
或两者中。