2011-03-22 92 views
2

情况是我在这个网站有不同的访问级别,我有简单的登录过程为所有有效的用户工作,但我现在试图分隔不同的用户访问不同的页面。PHP登录认证问题(初学者)

这是我在我的页面的起始码:

// CHECKS IF THE USER HAS LOGGED IN 
session_start(); 

if(!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']){ 
    header("location:index.php"); 
} 

if(!$_SESSION['mystatus']=='1'){ 
    header("location:access_error.php"); 
} 

所以基本上我想这个页面,如果他们登录用的1访问级别的用户只能访问但没有正确的访问级别相应地指导他们

目前,它允许以不同访问级别(例如3)登录的用户仍然可以查看此页面。

请帮忙。

千恩万谢,

+0

请注意,您可能希望使用'低于'和'高于'运算符或按位比较。这允许更细粒度的访问控制。 – Lekensteyn 2011-03-22 14:37:36

+0

,但通过使用“大于”肯定是不错的,如果我希望具有较高访问级别的所有用户访问该页面?我的情况是访问级别为2的用户应该无权访问此页面。 – buymypies 2011-03-22 14:47:34

+0

在这种情况下,您可能需要查看按位运算符。总之,每一位都是一个权限,可以设置为0(不可访问)或1(访问权限)。下一篇文章:[维基百科文章](http://en.wikipedia.org/wiki/Bitwise_operation)。关于[PHP中的按位操作]的问题(http://stackoverflow.com/q/2131758/427545)。 – Lekensteyn 2011-03-22 14:54:19

回答

1
if($_SESSION['mystatus']!='1'){ 
    header("location:access_error.php"); 
} 
3

!$_SESSION['mystatus'] == 1将被解释为(!$_SESSION['mystatus']) == 1。由于$_SESSION['mystatus']包含非假值(如1和3),因此它的计算结果为true!true转为false,因此false == 1不匹配。

使用不等于操作符(!=):

$_SESSION['mystatus'] != 1 
+0

谢谢你们。非常新的这个:D – buymypies 2011-03-22 14:39:11

+0

@ buymypies:如果这回答你的问题,点击这个答案左侧的'v'标记为接受。 – Lekensteyn 2011-03-22 14:55:02

2
if(!$_SESSION['mystatus']=='1'){ 

构造这样是非常危险的,特别是如果你是新来的PHP和还没有想出它的运算符优先级规则。

这被解释为“采取mystatus会话变量中的任何内容的逻辑NOT,并与字符串'1'进行比较。”

你想要的是

if ($_SESSION['mystatus'] !== '1') { 

“如果mystatus变量是一个字符串,不等于‘1’的字符串,然后评估为真。

+0

+1,人们总是混淆'=','=='和'==='及其目的。 – Jakub 2011-03-22 14:37:50

+0

我看到没有使用字符串'1'而不是数字1的eason – 2011-03-22 14:38:43

+0

@Col:Me或者,但这就是OP如何拥有它。 – 2011-03-22 14:40:05

0

后续工作给我。套装在自己的网页访问,并在你的数据库的权限,当用户尝试登录您检索许可,并与网页相比较的水平。

$permission = $_SESSION['PERMISSION'] 
$access=2; // level of access 
if ($permission>$access){ 
    $_SESSION["pagina"]="yourPage.php"; 
    header("Location: accessPermission.php"); 
} 

我希望作品您。