我试图使用多维数组方法做登录检查。
例如下面有一个数组:
$multiuser['master'][0] = 'boss'=>'123456';
$multiuser['master'][1] = 'computer' => '636363';
$multiuser['admin'][0] = 'admin1' => '382382';
$multiuser['admin'][1] = 'admin2' => '323243';
我如何检查用户,如果他们输入他们的用户名为'admin1'或'boss'在这个数组中存在并且密码与用户名'admin1'/'boss'匹配?我还想知道它的用户群。如果老板的用户名和密码匹配。如何找到master下的用户组
这不是处理登录的好方法。
1)数组的结构使得很难找到用户。当然,您可以扫描$multiuser
中的每个数组并尝试找到所需的用户名,但是当您尝试添加组时,这将变得越来越困难。
您应该使查找用户和从那里查找组变得更容易。如:
$users = array ('boss' => array(
'hash' => 'password_hash',
'group' => 'master'),
'admin1' => array(
'hash' => 'password_hash',
'group' => 'admin'),
// and so forth
);
现在如果你想找到$user
,你只需要找$users[$user]
,如果它是有定义的,它就在那里。然后你可以从$users[$user]['group']
中得到基团,以此类推。
2)您使用的是明文密码。密码不应该以明文形式存储,但至少应该进行散列和腌制。这是一个很长的话题,但这里有一个起点:
密码散列(PHP Security Consortium)
3)无论如何,您应该完全放弃在PHP中存储登录信息的想法,而使用数据库。将用户信息存储在平面文件(不好)或PHP文件(更糟)中会使以后的管理变得非常困难。
这可能看起来不是什么大事,因为你有几个用户,但它非常混乱。
我在我的许多站点中使用这种方法:
$accounts[]=array("username" => "guest123","password" => "password123");
$accounts[]=array("username" => "jon","password" => "password123");
$accounts[]=array("username" => "bob123","password" => "password123");