【问题标题】:PHP & MySQL restricted area per membergroup每个成员组的 PHP 和 MySQL 限制区域
【发布时间】:2013-03-04 12:59:35
【问题描述】:

我有一个表 $members,它有 4 个列($id、$username、$password、$usergroup),意思是(1、john、123、admin)。我喜欢用户组管理员可以访问一个页面,而用户组成员和访客没有它。

这是我在索引页面上的登录表单:

 <table width="300" border="0" align="center" cellpadding="0" cellspacing="1"      bgcolor="#CCCCCC">
 <tr>
 <form name="form1" method="post" action="checklogin.php">
 <td>
 <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
 <tr>
 <td colspan="3"><strong>Member Login </strong></td>
 </tr>
 <tr>
 <td width="78">Username</td>
 <td width="6">:</td>
 <td width="294"><input name="myusername" type="text" id="myusername"></td>
 </tr>
 <tr>
 <td>Password</td>
 <td>:</td>
 <td><input name="mypassword" type="password" id="mypassword"></td>
 </tr>
 <td>&nbsp;</td>
 <td>&nbsp;</td>
 <td><input type="submit" name="Submit" value="Login"></td>
 </tr>
 </table>
 </td>
 </form>
 </tr>
 </table>

这是我的 checklogin.php

<?php
////// 
////// Checks for members 
//////
$host="localhost"; // Host name 
$username="#"; // Mysql username 
$password="#"; // Mysql password 
$db_name="#"; // Database name 
$tbl_name="members"; // Table name 


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword'];  

// encrypt password 
$encrypted_mypassword=md5($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and                password='$encrypted_mypassword'";
$result=mysql_query($sql);

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "manage-post.php"
session_register("myusername");
session_register("mypassword"); 
header("location:../admincp/manage-post.php");
}
else {
echo "Wrong Username or Password";
}
?>

这被放置在我的每个页面上,以检查一个人是否已登录并允许登录用户访问并限制未登录用户访问:

<?php
////////
//////// Checks are you logged in or logged out
////////
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}
?>

那么应该调整上面最后一段代码中的哪些内容,以便某些页面只允许具有 $usergroup = admin 的成员并阻止具有 $usergroup=member 或 guest 的用户?

【问题讨论】:

  • 我不知道,从哪里开始。太多坏主意警报。普通密码 => 错误,session_register => 已弃用,session_is_registered => 已弃用,mysql_* => 即将弃用。您的会话变量也已填充。您应该使用 mysqli_fetch_assoc 之类的东西,并使用 $_SESSION['username'] = $userdata['username'] 填充变量。然后你可以用 $userdata['usergroup'] 填充一个值并检查这是否是 == admin。我希望,这不是你真正的 mysql 密码。

标签: php mysql permissions


【解决方案1】:

将 $usergroup 存储在 SESSION 中。
$_SESSION['usergroup']=$usergroup 在此代码中只需添加您想要的条件 喜欢, if($_SESSION['usergroup']==admin) { //condition }

【讨论】:

    【解决方案2】:

    将权限列添加到您的表中,将(管理员、经理)权限分配给您希望他们有权访问的成员。然后添加会话权限变量:

    /* in login validation form */   
    $data = mysql_fetch_array($results);
    $priv = $data['privilege'];
    
    $(!$_SESSION){
    $_SESSION(start);
    $_SESSION['user'] = $myusername;
    $_SESSION['priv'] = $priv;
    }
    /* in the file which you want to restrict access to */
    if($_SESSION['priv'] != 'manager' || $_SESSION['priv'] != 'admin'){
    header("location:main_login.php");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-11
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多