在哪里验证密码是否需要在PHP中重新刷新?
我得到了下面的代码,没有任何东西被插入到我的数据库中,我不知道为什么。。在哪里验证密码是否需要在PHP中重新刷新?,php,mysql,php-password-hash,Php,Mysql,Php Password Hash,我得到了下面的代码,没有任何东西被插入到我的数据库中,我不知道为什么。。password\u needs\u rehash()函数是否位于正确位置 我得到了一个测试,其中我回显了一个Javascript警报生成的新哈希,它显示了一个新的哈希,但新的哈希没有被插入到数据库中。我的逻辑一定有错误,但我找不到 <?php session_start(); include 'mysqli.php'; $userID = strtolower($_POST['userID']); $passwo
password\u needs\u rehash()
函数是否位于正确位置
我得到了一个测试,其中我回显了一个Javascript警报生成的新哈希,它显示了一个新的哈希,但新的哈希没有被插入到数据库中。我的逻辑一定有错误,但我找不到
<?php
session_start();
include 'mysqli.php';
$userID = strtolower($_POST['userID']);
$passwordFromForm = $_POST['password'];
$_SESSION['userID'] = $userID;
//Select the password from the requested userID and put into variable
$sql = "SELECT password FROM userdata WHERE userID = '$userID'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$passwordFromDatabase = $row['password'];
$verified = password_verify($passwordFromForm, $passwordFromDatabase);
if($verified == 0){
echo '<meta http-equiv="refresh" content="0; URL=index.php?triedLogin" />';
}else{
if(password_needs_rehash($passwordFromDatabase, PASSWORD_DEFAULT, ['cost' => 14])){
$passwordFromDatabase = password_hash($passwordFromDatabase, PASSWORD_DEFAULT, ['cost' => 14]);
echo "<script>alert('".$passwordFromDatabase."');</script>";
$sql = "INSERT INTO userdata ('password') VALUES ('$passwordFromDatabase')";
//NOW LOGIN WITH NEW PASSWORD
$sql = "SELECT * FROM userdata WHERE userID = '$userID' AND password = '$passwordFromDatabase'";
$result = mysqli_query($conn, $sql);
if(!$row=mysqli_fetch_assoc($result)){
echo '<meta http-equiv="refresh" content="0; URL=index.php?triedLogin" />';
} else {
$_SESSION['ID'] = $row['userID'];
unset($_SESSION['userID']);
echo '<meta http-equiv="refresh" content="0; URL=app/index.php" />';
}
}else{
$sql = "SELECT * FROM userdata WHERE userID = '$userID' AND password = '$passwordFromDatabase'";
$result = mysqli_query($conn, $sql);
if(!$row=mysqli_fetch_assoc($result)){
echo '<meta http-equiv="refresh" content="0; URL=index.php?triedLogin" />';
} else {
$_SESSION['ID'] = $row['userID'];
unset($_SESSION['userID']);
echo '<meta http-equiv="refresh" content="0; URL=app/index.php" />';
}
}
}
?>
- 确保您的表字段足够大以容纳该值,因为哈希非常长,它将抛出错误,因此不会插入
- 你应该准备你的声明,我很惊讶你还没有这样做,你进入密码哈希
$sql
。您可以使用$sql
覆盖它,并在其下方选择。我的密码字段是文本类型,因此它应该适合哈希字符串。当webapp即将完成时,我将准备所有mysql插件等;)不幸的是,我只遵循其他指南,最有用的帮助是在mysqli前端。不过,在发布之前,我将稍后重写所有内容;)@艾哈迈德·道坦克斯!!!我认为第一个sql被执行,然后进入下一个变量hehe@junkfoodjunkie@Zoung将文本
用于短字符串完全是浪费。对所有通用字符串使用VARCHAR(255)
,对任何大于1KB的字符串使用TEXT
,而散列密码显然不是。这插入到用户数据(“密码”)
一件事是你失败了,加上你从未执行过该查询……你在这里很注意,对吗?可能不会。我应该发布一个答案来引起您的注意吗?“rehash_password函数是否在正确的位置?”-嗯,什么rehash_password()
函数?但是插入请求是否应该在变量中声明时执行?我还看到我现在有两次sql:O@Fred ii-*密码\u需要\u再刷抱歉,我累了哈哈