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!");
  }
?>

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

这是我的 DB named Bob who is using an MD5 hash of the word "Password" as his Password.

中一位用户的照片

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

此代码:

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,如果您的查询匹配,它将 return 1 行,因此用户已经通过身份验证,否则它将 return 0。使用 mysql_fetch_assoc 然后比较结果是多余的。

如果一行匹配,

if($NumRows) 将 return 1,而 1true.

更新:

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

重要提示:

您不应使用 MySQL,因为它已被弃用,请改用 MySQLiMySQL 功能在 PHP 7.

中不可用

此外,您需要使用 mysql_real_escape_string.

来防止 MySQL 注入

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