2016-08-30 44 views
1

我想为普通用户和AdminUser做一个登录系统。如果普通用户在浏览器http://localhost/project中键入登录屏幕,用户可以使用他的ID和密码登录。但是,如果用户在浏览器中输入http://localhost/project/admin,则登录时,普通用户也会在adminpanel中获取我想要停止的访问权限。我该怎么做?我在这里呆了很久。有任何帮助吗?停止用户访问管理面板在php

登录用户:用户

$query = "SELECT * FROM user WHERE eid='$eid'and password='$password'"; 
$result = $db->select($query); 
if ($result != false) { 
$value = $result->fetch_assoc(); 
Session::set("login", "userLogin"); 
Session::set("username", $value['username']); 
Session::set("email", $value['email']); 
Session::set("uid", $value['uid']); 
Session::set("image", $value['image']); 
header("Location: index.php"); 
} else { $loginErr = "Username 
or Password Not Matched !!";} 

会议功能:

public static function checkSession(){ 
self::init(); 
if (self::get("userLogin")!== false) { 
self::destroy(); 
header("Location:login.php"); 
} 
} 

用户会话确认:

Session::checkSession(); 

登录管理

$query = "SELECT * FROM afcadmin WHERE adminname='$adminname'and password='$password'"; 
$result = $db->select($query); 
if ($result != false) { 
    $value = $result->fetchassoc(); 
    Session::set("loginadmin", "adminLogin"); 
    Session::set("adminname", $value['adminname']); 
    Session::set("adminemail", $value['adminemail']); 
    Session::set("adminid", $value['adminid']); 
    header("Location: index.php"); 
    } else { 
     $loginErr = "Usernameor Password Not Matched !!"; 
     } 
对于管理员10

会议功能:用于管理

Session::checkSessionAdmin(); 
+1

你应该读这些:[我怎样才能防止SQL注入在PHP?](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)和http://pointextoffenders.com/faq/devs –

+0

@ AlexanderO'Mara,第二个链接是有趣和启发。一个耻辱,我不得不自己找一个更好的背景颜色,因为设计师为了阻止背景图像而使用了这种垃圾回退背景颜色(因为你知道,一些工作场所阻止像tumblr这样的社交媒体) –

回答

0

public static function checkSessionAdmin(){ 
    self::init(); 
    if (self::get("adminLogin")!== false) { 
    self::destroy(); 
    header("Location:login.php"); 
    } 
    } 

会话确认您不必使用用户和管理员登录不同的表。您只需要一个列,可以帮助您检查用户是否具有管理员权限。例如:您可以创建一个is_admin列,并将其值设置为1(如果用户是管理员),如果他/她不是0,则将其值设置为0。

# Your query 
$stmt = "SELECT 
users.id as uid, 
users.username as username, 
users.is_admin as is_admin 
FROM users 
WHERE users.username='{$username}' 
AND users.password='{$password}' 
LIMIT 1 
"; 

然后,您将结果添加到会议中,就像您已经在做的那样。

var_dump($_SESSION['user']); 

Array { 
    'uid' => '125', 
    'username' => 'SomeGuy', 
    'is_admin' => '1', 
} 

您的会话现在包含一个值is_admin,所以你可以检查,如果用户是通过使用简单if声明的管理。

if ($_SESSION['user']['is_admin'] == 1) { 
    // Admin only stuff here 
} 
0

,我可以看到你有用户和管理员两个独立的表来存储数据,所以我认为不应该是您所查询的任何问题,当它的用户,我们不能停下来眉头他们任何页面。

但是,如果用户可以使用自己的详细信息登录管理面板,这意味着您在这两个表中都有多个数据,这可能是由于您可能在这两个表中插入了相同的数据,或者您的插入中存在错误查询。

但作为一种解决方案,我认为它更好地添加角色字段在数据库中定义其用户或管理员,并且在您的选择查询后,如果条件检查是否符合您的要求并设置会话。

但是从我的角度来看,最好的办法是让用户和管理员都有单一表来存储所有评论数据,并使Admin表存储user_id和一些优先级。当你检查查询时,检查user_id是否属于admin表,并将它们定义为admin或user,并且将它们定义为set session。

这可能会解决您的问题,但如果需要更多帮助,请告诉我。

0

如果user_type是admin或customer,您可以在数据库和admin会话中拥有user_type字段。如果其管理员将其重定向到管理仪表板,否则将其重定向到客户仪表板。在管理员标题中,输入相同的检查。

希望这会有所帮助。

0

我找到了解决方案。我替换了下面的代码。

代码在用户登录时:

Replaced Session::set("login", "userLogin"); by Session::set("login", "true"); 

代码会话功能用户:

Replaced if (self::get("login")!== false) by if (self::get("login")== false) 

代码管理登录:

Replaced Session::Session::set("loginadmin", "adminLogin"); by Session::set("adminlogin", "true"); 

代码会话功能管理:

Replaced if (self::get("adminlogin")!== false) by if (self::get("adminlogin")== false)