php - 完美的 PHP/MySQL 登录脚本无法正常工作

标签 php mysql authentication

嘿伙计们,为了这个登录脚本,我已经思考了几个小时了。这是我一直使用的那个,我知道它适用于我的 MySQL 版本。它只是不会将我发送到正确的授权页面,它总是会重定向到“login_failed.php”文件。

非常感谢任何帮助。

<?php
ob_start();
$host="localhost";
$username="*****"; 
$password="*****";
$db_name="*****"; 
$tbl_name="*****";

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['user']; 
$mypassword=$_POST['pass'];

$encrypted_password=md5($mypassword);

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:main.php");
}
else {
header("location:login_failed.php");
}

ob_end_flush();
?>

最佳答案

我看到的代码不太正确:

  1. 很可能您不需要 stripslashes(),因为 magic quotes已被弃用。

  2. 您不需要对散列密码进行转义。 md5() 的结果call绝对可以相信是32个十六进制字符。

  3. 当您不需要所有字段时,请勿使用 SELECT * ...

  4. 你可能应该 trim()输入($_POST['user']$_POST['pass'])以去除可能意外插入的额外空格。

  5. 正如 ircmaxell 所指出的,您没有在查询中使用散列密码。我希望这只是构造查询时的一个错误。

  6. 你应该加盐你的密码。阅读这篇文章:Just hashing is far from enough.

现在...您是否尝试过回应查询并自己运行它以查看实际发生了什么?例如:

在调用 mysql_query() 之前删除重定向并放置一个 echo $sql

关于php - 完美的 PHP/MySQL 登录脚本无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526155/

相关文章:

php - 目标类 [App\Utilities\getIp] 不存在

php - 计算上传文件的数量

php - 如何将 2 个 SQL 查询放在一起?

mysql - 如何从同一个表运行多个限制为 0, 1 的选择查询并合并所有结果

使用选项/选择 HTML 表单标签的 PHP MySQL 多重搜索查询

Swift HTTP POST 登录验证

html - scrapy 将 InitSpider 转换为 CrawlSpider w/login

php - SQL 查询以显示最接近特定事件的数据

mysql - Redis 连接到 my-redis :6379 failed - getaddrinfo ENOTFOUND when running seeds

windows - 基于 HTTP 的 NTLM 身份验证