我的密码\u散列有问题,当我登录时,我想让用户登录会话,但当我使用密码验证时不工作,回显不返回任何内容。我怎样才能解决这个问题?谢谢这是我的代码:
<?php
session_start();
include_once("../Backend/conexao_db.php");
if((isset($_POST['txt_usuario'])) && (isset($_POST['txt_senha']))) {
$usuario = mysqli_real_escape_string($conn, $_POST['txt_usuario']);
$pass = mysqli_real_escape_string($conn, $_POST['txt_senha']);
$passwordhash = password_hash($pass, PASSWORD_DEFAULT);
$result_usuario = "SELECT * FROM tbl_Usuario WHERE email = '$usuario' && senha = '$pass'";
$resultado_usuario = mysqli_query($conn, $result_usuario);
if ($resultado = mysqli_fetch_assoc($resultado_usuario)) {
if (password_verify($pass, $passwordhash)) {
$_SESSION['usuarioId'] = $resultado['id'];
if ($_SESSION['empresaID'] == "") {
echo $_SESSION['usuarioId'];
} else {
}
}
}
}
这个代码完美的工作时,我不使用password_verify。
您在那里所做的是无用的,因为您正在测试您刚刚创建的密码哈希是否与其自身匹配。这永远是真的。
如果不知道您的会话变量,我会猜测如果($_SESSION['empresaID'] == "")导致您的错误,除非您在其他地方设置它。
但要改进您的代码:
您应该将散列存储在数据库中,并测试结果是否与输入的密码匹配。此过程的目标是不必将密码以明文形式存储在数据库中。
另外,请使用准备好的语句来防止SQL注入。在我的示例中,我使用了PDO。
使用预先准备好的语句,您可以避免使用mysqli\u real\u escape\u string——如果其中有任何特殊字符,它将更改密码。
if((!empty($_POST['txt_usuario'])) && (!empty($_POST['txt_senha']))) {
$usuario = $_POST['txt_usuario'];
$pass = $_POST['txt_senha'];
// returns a connection to pdo
$conn = Database::connectPDO();
$stmt = $conn->prepare('SELECT * FROM tbl_Usuario WHERE email = :email');
$stmt->bindParam(':email', $usuario);
if($stmt->execute()) {
while($user = $stmt->fetch(PDO::FETCH_ASSOC)) {
if(password_verify($pass, $user['senha'])) {
echo 'success';
}
}
}
}
因此,如果要添加用户,应将散列的密码存储在数据库中,以使此函数正常工作:
if((!empty($_POST['txt_usuario'])) && (!empty($_POST['txt_senha']))) {
$usuario = $_POST['txt_usuario'];
$pass = $_POST['txt_senha'];
$hashedPassword = password_hash($pass, PASSWORD_DEFAULT);
$conn = Database::connectPDO();
$stmt = $conn->prepare('INSERT INTO tbl_Usuario (email, senha) VALUES (:email, : senha)');
$stmt->bindParam(':email', $usuario);
$stmt->bindParam(':senha', $hashedPassword);
if($stmt->execute()) {
echo 'successfully registered';
}
}
问题内容: 在我的登录PHP文件中,有这些 在我的PHP注册文件中,有这个。 现在,从本质上讲,我这样做是为了使它散列密码,并在注册时将其自身插入数据库中。这样做。 但是,它无法验证它。两种结果都给出2个不同的哈希值,我不知道自己可能做错了什么。我还尝试只是使其再次哈希输入,然后检查数据库中的password_hash,但这没有用。 使用这些的正确方法是什么? (同样,$ passSign和$ u
问题内容: 目前,当用户登录时,我创建了2个会话。 因此,那些需要登录的页面,我只是这样做: 有安全漏洞吗?我的意思是,很容易破解我的会话吗?人们如何修改会话?以及如何预防呢? 编辑: 刚刚找到链接,这些方法够好吗?请发表您的意见。我仍然没有得到最好的答案。 问题答案: 术语 用户: 访客。 客户端: 安装在特定计算机上的特定于Web的软件。 了解会议 为了了解如何使会话安全,您必须首先了解会话的
问题内容: 我的注册脚本接受用户的密码,然后使用PHP的password_hash函数对密码进行加密,然后将其放入数据库中。当我使用刚刚创建的用户登录时,出现了检查密码是否相同的错误。就我而言,不是。在登录脚本中调用password_verify函数时,我在做什么错? 寄存器 登录 这是我执行var_dump时得到的: 很明显,密码没有匹配在一起。因此,在注册脚本上,密码被散列并发送到数据库。然后
我已经使用jsp创建了一个登录环境<代码>索引。jsp,登录。jsp。我从数据库中获取用户名和密码。如果用户名和密码与数据库匹配,则登录过程将完美完成。当用户给出错误的名称或密码时,它会显示错误消息,并重定向到登录页面。没什么问题,但我第一次登录时遇到了一个问题。提交错误名称或密码后显示错误消息的位置,该位置显示为空。 为什么显示null? 下面是我的代码 指数jsp login.jsp
美好的一天 这个问题已经在创建MCVE时得到解决(感谢Kukeltje让我这样做:)) 请参阅下面发布的答案,了解有效的MCVE。 例如,在一个名为@ViewScoped@的bean中,我想这样做: 然后,在另一个@ViewScoped@命名bean上,我希望检索存储的值(由于@PostConstruct获取空值,尝试抑制应用程序部署上的错误) 应用内的工作流确保设置值的页面在需要这些值的页面之前
当用户登录时,我将用户id存储到会话中,然后我希望将该用户id传递给ajax以检索数据库中的其他信息。存储在会话中的用户ID未传递给allResult。php我的登录页面代码片段,我在其中进行会话: 现在,登录后,用户将被带到仪表板: 在仪表板中,我试图使用ajax访问用户的其他数据 我需要获取用户id才能运行allResult。php所有结果。php