具有相同密码的不同帐户


Different Account that have the same password

我可以在页面中登录,但是如果我与其他帐户具有相同的密码,我的问题,我将无法登录,请你们告诉我问题是什么,如果您不介意帮助我,我真的很感激

,我是初学者非常感谢。
$login = mysql_query("SELECT * FROM usertable WHERE (username = '" . mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string($_POST['password']) . "')");
if (mysql_num_rows($login) == 1){
$_SESSION['username'] = $_POST['username'];
}

您在某处有一个重复的帐户。

请注意,您的 SQL 将选择具有给定名称和密码对的所有用户,但仅当查询结果只有一行时,它才会进行身份验证。更仔细地看看这个:

if (mysql_num_rows($login) == 1) {

所以,我的建议是:使用相等或更大的比较(>=),并消除重复项。删除已经存在的重复,并想出一种方法来避免创建重复的名称和密码对。

在您的表中,username应该是 UNIQUE 以避免这种重复问题,因此请尝试修改您的表格并删除重复的用户名。

您正在使用mysql_num_rows($login) == 1,即使您有两个具有相同密码的不同帐户,它也应该可以工作。可能您有两个具有相同登录名和密码的帐户。在查询后使用console.log(mysql_num_rows($login)),并查看它可能返回多行。

喜欢这个:

$login = mysql_query("SELECT * FROM usertable WHERE (username = '" . 
mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string($_POST['password']) . "')");
console.log(mysql_num_rows($login));
if (mysql_num_rows($login) == 1){
$_SESSION['username'] = $_POST['username'];
}
这不是

答案,但是...

  1. 使您的用户名和电子邮件字段在数据库中是唯一的,并在添加新成员时使用插入忽略。这将防止重复。

  2. 加密您的密码!

  3. 不要将 mysql 用于数据库连接,因为它已贬值。使用 PDO 或 mysqli。

  4. 除非必要,否则不要使用 SELECT *。在这种情况下,选择username就足够了。

  5. 加密您的密码!

切勿将纯文本密码存储在数据库中 - 这是非常不安全的。至少,执行以下操作来保护你的用户(和你自己)

$password = $_POST['password'];
$password = sha1($password);

这将使您免于很多头痛:)

编辑以反映Arjan的评论。

您只需要从用户名匹配的表中选择所有用户名(因为用户名通常是唯一的),然后在您有行后检查密码是否匹配。

如果它们匹配,则分配会话变量。

这种方式比从数组中获取用户名和密码(错误包)更好。

旁注:如果您将密码存储在数据库中,出于安全原因,它们应该被"散列"加密,而不是原始数据