我正在做一个小练习,我通过一个表单注册用户,在该表单中我使用password_hash()
. 一切都很好,因为我查看了数据库,发现您已经保存了加密密码。问题是我不知道如何通过验证哈希来登录,因为我拥有它,它会生成另一个密码并且不会启动会话。
报名表代码:
<html>
<head>
<title>Registro de usuarios</title>
<meta charset="utf-8">
</head>
<body>
<h2>Registro de usuarios</h2>
<form method="post" action="registroUsuarios.php">
<label for="nombre">Nombre de usuario:</label>
<input type="text" name="nombre"><br><br>
<label for="correo">Correo:</label>
<input type="email" name="correo"><br><br>
<label for="pass">Contraseña:</label>
<input type="password" name="pass"><br><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>
我注册用户的代码:
<?php
require_once("BaseDatos.php");
$objetoBBDD = new BaseDatos();
if(empty($_POST["nombre"]))
$nombre = "NULL";
else
$nombre = "'".$_POST["nombre"]."'";
if(empty($_POST["correo"]))
$correo = "NULL";
else
$correo = "'".$_POST["correo"]."'";
if(empty($_POST["pass"]))
$pass = "NULL";
else
$pass = "'".$_POST["pass"]."'";
//esto es lo que he utilizado para encriptar
$passCifrada = password_hash($pass,PASSWORD_DEFAULT);
$passCifrada = "'".$passCifrada."'";
$consulta = 'INSERT INTO usuarios(idUsuario,nombreUsuario,correo,password) VALUES(null,'.$nombre.','.$correo.','.$passCifrada.');';
$objetoBBDD->consultarBD($consulta);
if($objetoBBDD->filasAfectadas()>0)
{
echo '<h3><font color="green">Usuario registrado correctamente</font></h3>';
}
else
{
echo '<h3>'.$objetoBBDD->comprobarErrores().'</h3>';
}
echo '<a href="formularioRegistro.html"><button>Volver</button></a>';
$objetoBBDD->cerrarConexion();
?>
检查数据并启动会话的代码:
<?php
session_start();
require_once("BaseDatos.php");
$objetoBBDD = new BaseDatos();
if(empty($_POST["nombre"]))
$nombre = "NULL";
else
$nombre = "'".$_POST["nombre"]."'";
if(empty($_POST["pass"]))
$pass = "NULL";
else
$pass = "'".$_POST["pass"]."'";
//esto es lo que no se hacer para comprobar el hash que ya tengo
$passCifrada = password_hash($pass,PASSWORD_DEFAULT);
$passCifrada = "'".$passCifrada."'";
$consulta = 'SELECT * FROM usuarios WHERE nombreUsuario='.$nombre.' AND password='.$passCifrada;
$objetoBBDD->consultarBD($consulta);
$fila = $objetoBBDD->extraerFilas();
if(strcmp($nombre,$fila["nombreUsuario"])==0 && strcmp($passCifrada,$fila["password"]==0))
{
$_SESSION["id"] = $fila["idUsuario"];
echo '<h2><font color="green">Sesion iniciada</font><br><br>';
echo 'Bienvenido '.$fila["nombreUsuario"].'</h2>';
}
else
{
echo '<h2><font color="red">Error al iniciar sesión</font></h2>';
echo '<h3><font color="red">Nombre de usuario o contraseña incorrecto</font></h3>';
}
echo '<a href="loginUsuarios.html"><button>Volver</button></a>';
$objetoBBDD->cerrarConexion();
?>
强密码
它
hash
是这样生成的:比较您发送的密码
$_POST
和保存在数据库中的哈希值是这样的:参考:
http://php.net/manual/en/function.password-verify.php
您应该创建一个比较所述哈希的方法,也许您应该首先验证用户是否存在。如果存在,则比较所述哈希。这是一个例子:
希望对你有帮助