You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

注册哈希密码无法在登录时验证的问题求助

问题分析

你的核心问题是密码验证逻辑错误:

  • 注册时用password_hash()生成带随机盐的哈希值存储,这个函数每次生成的哈希字符串都不一样(因为内置随机盐);
  • 原登录代码直接拿用户输入的明文密码和数据库哈希对比,自然不匹配;
  • 你尝试重新哈希用户输入的密码再查询,但由于每次哈希结果不同,也无法和数据库中已存储的哈希匹配。
正确解决方案

正确的验证流程应该是:

  1. 先根据用户输入的邮箱,从数据库查询出对应的用户信息(包括存储的密码哈希);
  2. 用PHP内置的password_verify()函数对比用户输入的明文密码和数据库哈希值,这个函数会自动解析哈希中的盐,完成密码验证。

修改后的登录代码如下:

<?php
    session_start();
    require 'dbcon.php';

    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        $email = $_POST['email'];
        $password = $_POST['password'];
        $remember = $_POST['remember'] ?? null;

        // 第一步:先根据邮箱查询匹配的用户
        $query = "SELECT * FROM users WHERE email = '$email' limit 1";
        $row = query($query);

        if($row) {
            $user = $row[0];
            // 第二步:用password_verify验证密码正确性
            if(password_verify($password, $user['password'])){
                $_SESSION['SES'] = $user;

                if($remember) {
                    $expires = time() + ((60*60*24)*7);
                    $salt = "*&salt#@";
                    $tokenkey = hash('sha256', (time() . $salt));
                    $tokenvalue = hash('sha256', ('Logged_in' . $salt));

                    setcookie('SES', $tokenkey.':'.$tokenvalue, $expires);
                    
                    $id = $user['id'];
                    $query = "UPDATE users SET tokenkey = '$tokenkey', tokenvalue = '$tokenvalue' WHERE id = '$id' limit 1";
                    query($query);
                }

                header("Location: index.php");
                die;
            }
        }
        // 邮箱不存在或密码错误,统一提示
        echo '<script>
                window.location.href="login.php";
                alert("Email or password incorrect");
                </script>';
    }
?>
额外安全优化建议
  • 修复SQL注入风险:当前用addslashes()拼接SQL的方式存在漏洞,建议改用MySQLi或PDO的预处理语句;
  • 移除无用代码:原登录代码中password_hash((time() . $salt),PASSWORD_DEFAULT);这行没有赋值给变量,完全无用,可直接删除;
  • 注册代码同样建议改用预处理语句,避免注入风险。

内容的提问来源于stack exchange,提问作者CarpeCodice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:22:46