PHP 登录脚本根本不登录


Php Login Script Not Logging In At All

>我创建了一个脚本来将用户登录到网站,但是即使使用正确的密码,我也永远无法进行身份验证。 其他一切正常。在文本框中键入用户名和密码后,按登录按钮即可激活此脚本。下面是脚本:

<?php
session_start();
include('connection.php');
//STEP 2 Declare Variables
$Name = $_POST['username'];
$Pass = md5($_POST['password']); // Encrypt password with md5() function.
$Query = mysql_query("SELECT * FROM Users WHERE username='$Name' AND password='$Pass'");
$NumRows = mysql_num_rows($Query);
$_SESSION['username'] = $Name;
$_SESSION['password'] = $Pass;
//STEP 3 Check to See If User Entered All Of The Information
if(empty($_SESSION['username']) || empty($_SESSION['password']))
  {
    die("Go back and login before you visit this page!");
  }
if($Name && $Pass == "")
  {
    die("Please enter in a name and password!");
  }
if($Name == "")
  {
    die("Please enter your name!" . "</br>");
  }
if($Pass == "")
  {
    die("Please enter a password!");
    echo "</br>";
  }
//STEP 4 Check Username And Password With The MySQL Database
if($NumRows) 
  {
    // If The User Makes It Here Then That Means He Logged In Successfully
    echo "";
    $_SESSION['username']=$Database_Name;
  }
else 
  {
    die("Incorrect Username or Password!");
  }
?>

登录后,我得到"不正确的用户名或密码!",即使输入的用户名和密码是正确的。密码在数据库中以 md5() 哈希形式输入。这个脚本在我第一次创建它时几年前就工作了。下面发布的是数据库的屏幕截图。任何帮助将不胜感激

这是我数据库中一个名为Bob的用户的图片,他使用单词"密码"的MD5哈希作为他的密码。

这是他尝试登录时回显结果的图片。

此代码:

if($NumRows != 0)
  {
    while($Row = mysql_fetch_assoc($Query))
      {
        $Database_Name = $Row['username'];
        $Database_Pass = $Row['password'];
      }
  }
else
  {
    die("Incorrect Username or Password!");
  }
if($Name == $Database_Name && $Pass == $Database_Pass)
  {
    // If The User Makes It Here Then That Means He Logged In Successfully
    echo "";
    $_SESSION['username']=$Database_Name;
  }

只需使用mysql_num_rows即可简化:

if($NumRows) {
    // If The User Makes It Here Then That Means He Logged In Successfully
    echo "";
    $_SESSION['username']=$Database_Name;
} else {
    die("Incorrect Username or Password!");
}

解释:

由于您使用的是 mysql_num_rows ,如果您的查询匹配,它将返回1行,因此用户已经过身份验证,否则它将返回0 。使用mysql_fetch_assoc然后比较结果是多余的。

如果一行匹配,if($NumRows)将返回1,并且1 true

更新:

这很可能是由于数据库中的字段长度太短而无法成功插入整个md5()哈希。因此,后半部分没有成功插入。

重要:

您不应该使用 MySQL,因为它已被弃用,请改用MySQLiMySQL函数在 PHP 7 中不可用。

另外,您需要通过使用 mysql_real_escape_string 来防止 MySQL 注入。

md5()不是存储密码的非常安全的方式,而是使用 crypt() .