密码\u verify()备选方案?-PHP
我正在尝试做一个简单的登录,如果你愿意的话。我正在使用MySQLi,到目前为止它看起来不错密码\u verify()备选方案?-PHP,php,passwords,Php,Passwords,我正在尝试做一个简单的登录,如果你愿意的话。我正在使用MySQLi,到目前为止它看起来不错 <?php ob_start(); $myusername = @$_POST['username']; $mypassword = @$_POST['password']; if (isset($_POST['logged'])) { $link->escape_string($myusername); $link->
<?php
ob_start();
$myusername = @$_POST['username'];
$mypassword = @$_POST['password'];
if (isset($_POST['logged'])) {
$link->escape_string($myusername);
$link->escape_string($mypassword);
$stmt = $link->prepare("SELECT * FROM members WHERE username=?") or die ($link->error);
$stmt->bind_param('s', $myusername);
$stmt->execute() or die($stmt->error);
$stmt->store_result();
$count = $stmt->num_rows();
if (!empty($myusername) && !empty($mypassword)) {
if($count == 1) {
$rs = $link->query("SELECT * FROM members WHERE username='$myusername'");
$row = $rs->fetch_array(MYSQLI_ASSOC);
if (password_verify($mypassword, $row['password'])) {
$_SESSION['username'] = $myusername;
$_SESSION['first_name'] = $row['first_name'];
$_SESSION['last_name'] = $row['last_name'];
$_SESSION['email'] = $row['email'];
$_SESSION['loggedIn'] = true;
header("Location: login.php");
}
else {
echo "<p style=\"color: red\">Wrong Password</p>";
}
}
else {
echo "<p style=\"color: red\">Wrong Username</p>";
}
}
else {
echo "<p style=\"color: red\">Fill in all fields</p>";
}
}
?>
密码\u验证是否可用于PHP>=5.5.0,因此您的主机可能没有所需的PHP版本
见:
您可以尝试以下方法:
crypt($row['password'], $mypassword) == $mypassword
password\u hash
及其配套的password\u verify
在PHP>=5.5中可用
但是有一个兼容性库/后端口,使它们可用于PHP>=5.3.10 atpassword\u verify()
仅可从PHP 5.5获得。如果您的托管公司尚未安装该版本,您的代码将因未定义函数
错误而崩溃,并留下一个空白的白色屏幕。什么是escape\u string
,它不是php函数?嗯。。我创建了一个用户名和密码为123的虚拟帐户,当我输入用户并通过时,它回显“错误密码”。不过,我删除了“==$mypassword”,并将$row['password']变量与$mypassword变量切换。太棒了!我很高兴它做到了:)我只使用了库中的两个函数来实现PHP5.3.10:函数_strlen($binary_string)和函数password_verify()。它工作得很好!