Php 为什么我的登录系统不工作?
我已经创建了一个系统,允许管理员注册另一个管理员的电子邮件地址和密码登录到一个受保护的区域。管理员通过以下表格注册:Php 为什么我的登录系统不工作?,php,mysql,password-hash,Php,Mysql,Password Hash,我已经创建了一个系统,允许管理员注册另一个管理员的电子邮件地址和密码登录到一个受保护的区域。管理员通过以下表格注册: <form action="adduser.php" method="POST"> <label for="emailaddress">Email Address: </label><input type="text" name="emailaddress" /> <label
<form action="adduser.php" method="POST">
<label for="emailaddress">Email Address: </label><input type="text" name="emailaddress" />
<label for="password">Password: </label><input type="password" name="password" />
<label for="name">Name: </label><input type="text" name="name"/>
<input type="submit" value="Submit" name="submit"/>
</form>
电邮地址:
密码:
姓名:
adduser.php如下所示:
<?php
require'databaselogin.php';
if(isset($_POST['emailaddress'],$_POST['password'],$_POST['name'])){
$result= $pdo->prepare('INSERT INTO users (emailaddress, password, name )
VALUES(:emailaddress, :password, :name)');
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);
unset($_POST['submit']);
$_POST['password'] = $hash;
$result->execute($_POST);
header("Location:admin.php");
}
?>
到目前为止,名为users的表开始工作,然后填充数据。我猜可能是由于使用了$hash错误,而存储在表中的密码不是用户在密码字段中输入的密码
当用户尝试使用此表单登录时:
<form action="login.php" method="POST" >
<label for="emailaddress">Email Address:</label><input type="text" name="emailaddress"/>
<label for="password">Password:</label><input type="password" name="password"/>
<input type="submit" value="Go" name="submit"/>
</form>
电邮地址:
密码:
链接到此php:
<?php
session_start();
require'databaselogin.php';
$stmt = $pdo->prepare('SELECT * FROM users WHERE emailaddress = :emailaddress');
if(isset($_POST['submit'])){
$criteria = [
'emailaddress' => $_POST['emailaddress'],
];
$stmt->execute($criteria);
$user = $stmt->fetch();
var_dump($user);
if (password_verify($_POST['password'], $user['password'])) {
$_SESSION['loggedin'] = $user['id'];
header("Location:admin.php");
}
else {
header("Location:index.php");
}
}
?>
在网站注册时输入正确的电子邮件和密码后,只需重新加载index.php,而不是将其带到admin.php。我真的不能理解这里的问题,因为代码听起来太像我了,我猜这是一个问题,无论$hash实际保存到密码字段
如果有人能帮上忙,我将不胜感激 由于您没有回复评论,我提交以下内容 我怀疑您的密码列的长度太短 如果是这种情况,则需要将其设置为60+。因此,请更改列,清除包含哈希的密码行,创建新哈希,然后重试 关于这方面的手册:
- 如果MySQL太短,它将以静默方式失败。我以前见过很多次这种情况
exit代码>在每个头之后,否则您的代码可能需要继续执行
if (password_verify($_POST['password'], $user['password'])) {
$_SESSION['loggedin'] = $user['id'];
header("Location:admin.php");
exit;
}
else {
header("Location:index.php");
exit;
}
如何,使用简单的密码(如1234)注册用户,并检查表中存储的哈希值。然后使用相同的方法回显散列1234,查看字符串是否匹配。如果他们这样做,问题与哈希无关。密码列的长度是多少?如果它太短,你会默默地失败。var\u dump($user)
的结果是什么?我们都在这里耐心地等待着……原来是密码列的长度,现在可以了,谢谢!奥利·阿特金斯,请核对一下他说的话。他是对的