匹配上一个网址,以提供备用“取消”按钮

时间:2017-01-03 12:06:00

标签: php

我有一个普通管理员和超级管理员的网站,两者共享一些功能。我介绍的一个新功能是管理员序列激活。这已在普通管理员中实现,现在我正在尝试将相同的代码添加到超级管理员。如果您是普通管理员或超级管理员,您可以单击序列激活并继续激活.2.pp以激活。除非你改变主意激活序列,否则一切都运行得很好,在这种情况下你会点击“返回”或“取消”按钮返回上一个屏幕。我目前检查上一页使用php的内容:

$ref = $_SERVER['HTTP_REFERER'];

这个想法是在“后退”链接上显示不同的返回网址和“取消”按钮,具体取决于前一页是“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>" ;
}

2 个答案:

答案 0 :(得分:1)

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

我没有观察HTTP referer(如果刷新页面会丢失),我建议您将参数从第一页传递到第二页以确定它们的来源,并将它们发送回您需要的位置。

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

  • activate2.php?超级= 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>" ;
}

答案 1 :(得分:0)

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

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()为出发点。