匹配以前的 URL 以提供备用'cancel'按钮

  • 本文关键字:备用 按钮 cancel URL php
  • 更新时间 :
  • 英文 :


我有一个网站,有一个普通管理员和一个超级管理员,两者共享一些功能。我要介绍的一个新功能是管理员序列激活。这已经在普通管理员中实现了,现在我正试图将相同的代码添加到超级管理员中。如果你是普通管理员或超级管理员,你会点击序列号进行激活,然后转到activate2.php进行激活。除非你改变主意激活串行,否则一切都很好,在这种情况下,你会单击"后退"或"取消"按钮返回前一个屏幕。我目前使用php:查看上一页的内容

$ref = $_SERVER['HTTP_REFERER'];

这个想法是在"返回"链接和"取消"按钮上显示一个不同的返回url,这取决于上一页是"super-admin serials.php"还是仅仅是"admin-serials.php"。我试图在$_SERVER['HTTP_REFERER']中匹配"super-admin-serials.php'",以推断出上一页的内容,并允许用户返回到他的上一页。但是我编写的代码不起作用,所以如果有人能帮助实现这个简单的函数,我将不胜感激。以下是到目前为止我在独立的"activate2.php"页面上的代码,用于取消并返回到上一个:

$superpage=array('super-admin-serials.php');
$ref = $_SERVER['HTTP_REFERER'];
if (in_array($ref, $superpage)) {
echo "<a  href="super-admin-serials.php">back (super admin)</a>"; 
} else {
echo "<a  href="admin-serials.php">back (normal admin)</a>" ;
}

HTTP referer可能不仅仅包含它所使用的脚本的名称,它通常包括一个完全限定的URL,如http://example.com/foo/your-script.php

我建议您从第一个页面到第二个页面传递一个参数,以确定它们来自哪里,并将它们发送回您需要的地方,而不是观察HTTP referer(如果它们刷新页面,就会丢失)。

透明地,用户将访问以下任一项:

  • 激活2.php?super=1
  • activate2.php

然后以下代码将执行您想要的操作:

$isSuper = !empty($_GET['super']);
if ($isSuper) {
echo "<a  href="super-admin-serials.php">back (super admin)</a>"; 
} else {
echo "<a  href="admin-serials.php">back (normal admin)</a>" ;
}

我知道你有某种登录功能,不能与两个不同的用户同时登录(如果不是这样,请确保你运行的网站不安全,很容易被黑客入侵)。在这种情况下,服务器上应该已经有了这些信息,因此从客户端收集这些信息既不必要也不可靠。所以代码看起来是这样的:

if ($_SESSION['is_super']) {
echo '<a  href="super-admin-serials.php">back (super admin)</a>'; 
} else {
echo '<a  href="admin-serials.php">back (normal admin)</a>';
}

(请注意,我还删除了双引号,这除了使代码更难写和读之外没有其他目的。)

无论如何,您必须知道HTTP_REFERER:

  • 如果您添加额外的步骤(例如,显示表单错误以更正它们),将会丢失
  • 可能根本不存在(一些代理和安全程序会将其剥离)
  • 通常会包含额外的东西,使简单的字符串比较失败,比如GET参数(当然是完整的URL)

如果你选择它,你可能想看看parse_url()作为起点。

相关内容

  • 没有找到相关文章

最新更新