2010-10-22 157 views
0

我有一个带有会话控制的php登录页面。它将普通用户路由到info.php,管理员用户路由到info_admin.php。如果我使用“普通”用户登录,它会转到info.php,但是,在地址栏中,我可以访问info_admin.php,它不会将我踢出去,并允许我访问。我该如何控制或防止用户手动执行此操作?防止用户访问管理页面

有关信息,我使用这个脚本:http://php-login-script.com/

非常感谢!

回答

4

只是为了让Lotus Notes的代码有点更紧凑:

<?php 
if (!isset($_SESSION['user_level']) || ($_SESSION['user_level'] != 2)) { 
    header('Location: login.php'); 
    exit; 
} 
?> 

<!-- Your page HTML here --> 
+0

我使用这段代码,但没有显示页面。我如果(!isset($ _ SESSION ['user_level'] || $ _SESSION ['user_level']!= admin) – BigMike 2010-10-22 21:42:34

+0

对不起,代码中有错误,我已经修复了它 – 2010-10-22 21:44:58

+0

Mike,我刚做了一个回声$ _SESSION ['user_level'];它没有显示,但我知道它的工作原理,因为protect_page()函数正在使用Session控制,所以这个coule会失败的原因是什么? – BigMike 2010-10-22 21:53:58

2

我迅速通过登录码扫描,这似乎是设置变量$_SESSION['user_level']时英寸

要允许有2级唯一用户,例如用户首次登录,把这个在你的页面的顶部。它应该将任何不是二级用户的人重定向回登录页面。

<?php 

if (isset($_SESSION['user_level'] && $_SESSION['user_level'] == 2) { 

?> 


<!-- Your page HTML here --> 


<?php 

} else { 
    header('Location: login.php'); 
} 

?> 
+0

莲花,我有在每一页的顶部,但它只检查该用户登录它不检查用户。级别 – BigMike 2010-10-22 17:15:18

+0

好的,已编辑。希望这应该工作。 – 2010-10-22 17:26:10

+0

这很酷,但为什么如果在文件顶部验证失败时只更改标题,为什么要将所有HTML代码放在if ... else之间呢?这将使阅读代码更容易。 – Liam 2010-10-22 22:06:45

1

高层次的方法是,在登录时,存储在会话或数据库中的用户的访问级别。在每次页面调用时,检查该值。

1

只需添加一个额外的函数来检查用户级别 - 如果它处于或高于所需级别,则返回true。如果不是,则返回false和故障转移。然后在您想要保护的页面中,使用所需的保护级别触发功能。

例如:

function checkPerms($level) { 
    if ($level >= number) { 
    return true 
    } else { 
    failover here 
    } 
} 

然后在你的页面调用

checkperms(5); 

编辑:如果你真的很漂亮的,你可以只添加一个额外的参数去原来的函数调用与用户级别,默认为最低值。然后,如果用户验证为已注册,则可以同时检查用户级别。