使用PDO登录系统

时间:2015-08-23 23:42:08

标签: php pdo login

请我一直尝试登录,但我似乎得到了其他的"用户名和密码未找到"。我无法使用此代码登录

这是我的代码:

<?php
session_start();

require 'lib/password.php';

if(isset ($_POST['submit'])){
    $errMsg = '';

    $username = trim($_POST['username']);
    $password = trim($_POST['password']);



    if($username == '')
        $errMsg = 'You must enter your username<br>';

    if ($password == '')
        $errMsg = 'You must enter your password<br>';

    if($errMsg == ''){
        $records = $conn->prepare('SELECT id, username, password FROM users WHERE username = :username');
        $records->bindParam(':username', $username);
        $records->execute();
        $results = $records->fetch(PDO::FETCH_ASSOC);

        if(count($results) > 0 && password_verify($password, $results['password'])){
            $_SESSION['username'] = $results['username'];
            header('location:welcome.php');
            exit;
        }else{
            $errMsg = 'Username and Password are not found<br>';
        }
    }

}

?>

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<?php
 if(isset($errMsg)){
 echo '<div style="color:#FF0000;text-align:left;font-size:12px;">'.$errMsg.'</div>';
 }
 ?>
<form action="<?php echo $current_file; ?>" method="POST">
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" name="submit" value="Log In">

<p>If you don't have an account, <a href="register.php">SIGNUP</a></p>

</form>
</body>
</html>

可能是什么问题。请有人帮忙吗?

1 个答案:

答案 0 :(得分:1)

确保密码列足够长以容纳哈希值。

很多时候,这是问题的根源。如果时间不够长,则需要更改列的长度,删除现有数据并重新开始。

使用建议长度的VARCHAR(255)。

从手册:

  

使用bcrypt算法(默认自PHP 5.5.0起)。请注意,此常量旨在随着时间的推移而变化,因为新的和更强大的算法被添加到PHP中。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择)。

如果您的列是50,那么它将失败。

password_hash()生成的哈希值产生60个字符的字符串:

<强> $ 2Y $ 12 $ QjSH496pcT5CEbzjD / vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

在文件的操作中加$current_file;我们不知道,所以请确保它已被正确分配。