gpt4 book ai didi

php - PDO 登录脚本返回 false

转载 作者:行者123 更新时间:2023-11-29 05:27:02 25 4
gpt4 key购买 nike

我创建了一个登录脚本,我只是试图匹配通过我的登录表单传递的用户名和密码,创建一个 session 并传递 session 变量并将用户重定向到另一个页面。

我正在使用 OOP PDO 方法风格,因为这是前进的方向,而且编码起来要简单得多。

注册用户时,我使用 PHP crypt 方法加密密码。但是,当我尝试登录时,我的声明返回为 false,公平地说,我不知道我做错了什么,也许我没有正确解密密码,我不确定。

当我说 false 时,我的意思是我的 if 语句回显了

无效的用户名或密码。再试一次

非常欢迎和感谢任何帮助或想法,在此先感谢您。

索引.php

<form id="loginForm" method="POST" action="classes/class.Login.php">
<input type="text" id="username" name="username" placeholder="Username"/>
<input type="password" id="password" name="password" placeholder="Password" class="showpassword"/>
<input type="submit" name="submit" value="Log in"/>

类/class.Login.php

public function loginuser() {

$username = $_POST['username'];
$password = $_POST['password'];

$stmt = $this->pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1");
$stmt->bindValue(":username", $username);
$stmt->bindValue(":password", crypt($password));
$stmt->execute();
if ($stmt->fetch())
{
$_SESSION['authorized'] = true;
$_SESSION['username'] = $username;
header("Location: testloginrequired.php");
}
else
{
echo "Invaild username or password. Try again";
}
}// end loginuser

最佳答案

正如@Nambi 建议的那样,如果您要使用 crypt()您将需要使用可选参数 Salt,否则它将返回不同的结果,这就是它永远不会匹配的原因。

echo crypt('foo');
echo crypt('foo');
echo crypt('foo');

返回:

$1$rnmZxKr0$V7lk8JZ0tV1Utb78hH0g.0
$1$v84YR6KA$Xl5QvouObIZqWvxEIQwO/.
$1$expSZHgb$HAZ9ydKmjQcmwLeLDxjO41


echo crypt('foo', 'bar');
echo crypt('foo', 'bar');
echo crypt('foo', 'bar');

返回:

ba4TuD1iozTxw
ba4TuD1iozTxw
ba4TuD1iozTxw


显然,如果您想要更多控制,最好将盐遮盖起来而不是使用普通盐,或者让它自动生成。

注册用户时,您必须存储生成的盐。
当检查登录时,你得到了盐,并将它与用户输入的密码一起使用来 crypt() 它,并检查用该盐加密的密码是否与数据库中的密码匹配。

注意:为了安全,这很明显但以防万一:为每个密码生成不同的盐,如果您使用相同的盐,如果一个密码被破解,那么黑客将知道密码的盐所有其他密码,让他的生活更轻松。


正如@Nabil 建议的那样,您最好研究一下您将使用的加密方式,因为稍后更改它会很痛苦。

我个人比较喜欢河豚

避免使用 MD5 和 SHA1,它们曾经被认为是安全的,但随着技术的发展,它不再安全了,即使在 php 文档的相应页面上,用户也警告新用户不要使用它们。

关于php - PDO 登录脚本返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18976682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com