繁体   English   中英

如何检查密码?

[英]How do I check the password?

最近发现我的登录处理程序中存在问题。 事实是,即使输入的密码正确并且与数据库中的密码匹配,脚本仍然会将我发送到错误页面。

session_start();
include ("db.php");

 if (isset($_POST['login'])) {                                     
        $login = $_POST['login']; 
        $login = stripslashes($login);
        $login = htmlspecialchars($login);
        $login = trim($login);
        if ($login == '') {
            unset($login);
            } 
            } 

        if (isset($_POST['password'])) {
        $password=$_POST['password']; 
        $password = stripslashes($password);
        $password = htmlspecialchars($password);
        $password = trim($password);
        $password = hash("md5",$password); 
        if ($password =='') {
            unset($password);
            }
            }


if (empty($login) or empty($password)) 
    {
    exit (header('location:index.php'));
    }

$result = mysql_query("SELECT * FROM users_data WHERE login='$login'");

    $row = mysql_fetch_array($result);

    if (empty($row['password']))
    {
    exit (header('location:mistake.php'));
    }
    else {

    if ($row['password']==$password) {

    $_SESSION['login']=$row['login']; 
    $_SESSION['users_id']=$row['users_id'];
    header('location:first.php');

    }
    else {

        header('location:mistake.php');



    }
    }

HTML形式:

<form action="login.php" method="post" class="login">



<label><span>Login:</span>
<input name="login" type="text" size="20" maxlength="100">
</label>




<label><span>Password:</span>
<input name="password" type="password" size="20" maxlength="100">
</label>



<p>
<input type="submit" name="submit" class ="submit" value="Login">
</p>

UPD:谢谢您的回答,终于找到问题所在了-我刚刚在数据库中指定的密码值长度不足。

首先,为什么将密码存储在数据库中而不散列密码(例如md5)。

如果这样做,则无需处理密码,您只需将存储的md5(password)与用户发布的密码的md5哈希值进行比较即可。

另外,由于编码的原因,很可能会将您重定向到mistake.php页面而不是success.php页面。

如果您向我们提供了用于测试代码的密码(假设您正在测试它;;)),这将有所帮助。

干杯!

编辑:请查看更好的加密技术,如@jayblancard在以下评论中所建议。

尝试使用isset()代替空

if (isset($row['password']))
  1. 我只是建议您尝试调试代码,错误地在多个地方调用了DOT php,因此请使用die("die message")来查看哪个被解雇了。

  2. 由于您没有对代码进行测试,因此请调试有效和无效输入的输出并检查输出。

  3. 对输入和输出感到满意后,检查条件是否像以前那样使用模具条件,是否表现出预期的效果。

注意:你的代码是凌乱看看这个瘦基础知识

也看一下OO编程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM