使用相同的名和姓注册和登录多个用户


Register and Login Multiple Users With the Same Firstname and Lastname

我正在研究一个注册登录系统,但我面临以下问题:-我可以有两个(或更多)员工具有相同的名字和相同的姓氏,和可能具有相同的密码,每个位于相同的位置,或不同。当我试图注册它们时,显然没有问题,但当我想登录它们时,问题出现了。

Users表:

id int (11) A_I P_K,
firstname varchar (50),
lastname varchar(50),
password varchar(150)

Register.php

<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=xxx', 'root', '');
$fname = isset($_POST['fname]) ? $_POST['fname'] : '';
$lname = isset($_POST['lname']) ? $_POST['lname'] : '';
$pass  = isset($_POST['pass']) ? password_hash($_POST['pass'], PASSWORD_DEFAULT) : '';
$stmt = $db->prepare('INSERT INTO users SET fname=?,lname=?,pass=?');
$stmt->execute([$fname,$lname,$pass]);
?>
<form method="POST">
    <input type="text" name="fname"/><br/>
    <input type="text" name="lname"/><br/>
    <input type="password" name="pass"/><br/>
    <input type="submit" value="Register"/>
</form>

假设以下用户将注册:

fname=aaa lname=bbb pass=123456 // password_hash(123456) = hash1
fname=aaa lname=bbb pass=123456 // password_hash(123456) = hash2

login。

<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=xxx', 'root', '');
$fname = isset($_POST['fname]) ? $_POST['fname'] : '';
$lname = isset($_POST['lname']) ? $_POST['lname'] : '';
$pass  = isset($_POST['pass']) ? $_POST['pass'] : '';
$stmt = $db->prepare('SELECT * FROM users WHERE fname=? AND lname=?');
$stmt->execute([$fname,$lname]);
while ($row = $stmt->fetch(PDO::FETCH_OBJ)){
    if (password_verify($pass, $row->pass)) {
        echo $row->fname,' ',$row->lname,'<br/>',$row->pass,"<br/>";
        // header('Location: app.php');
    }
}
?>
<form method="POST">
    <input type="text" name="fname"/><br/>
    <input type="text" name="lname"/><br/>
    <input type="password" name="pass"/><br/>
    <input type="submit" value="Login"/>
</form>

如果我运行Login.php脚本,我会得到以下输出:

aaa bbb
$2y$10$Onkd3S06bOuOuyEH0/I9Be4jry1G8uIXgb3LxwroBZfZzywHKA6Eq (== hash1)
aaa bbb
$2y$10$ss0n1iBYPN4LG2VLP90Yc.vH109Y1Lq54X0bI/TGS242Hn/VkGwVi (== hash2)

我的问题是,我如何区分这两个用户,使他们能够成功登录app.php页面,我必须显示他们的凭据和其他个人信息,这明显不同于另一个用户。谢谢!

LE:如果我尝试使用LIMIT 1进行登录查询,那么它将只显示将在db中找到的第一个记录。

您可以在表中使用其他唯一字段,如用户名或电子邮件,这样您就可以确保获得正确的帐户,即使最后一个&名字不同

如果用户具有相同的名、姓和密码,则无法确定数据库中的哪个用户是正确的。你需要给他们一个独特的部分。可以是登录名或者邮箱地址

您确实需要为每个用户分配一个惟一的id来处理此类情况。如何生成id取决于您。

不强制用户使用username是强制性的吗?

你也可以有email,它总是不同的。

目前大多数网站要么强制用户使用唯一的usernameemail

email必须是唯一的,因为它是用户与站点管理员的联系点。