当前位置: 首页 > 知识库问答 >
问题:

PHP/mySQL登录不成功

司徒高丽
2023-03-14

我已经编写了一个php用户登录脚本,虽然我已经设法使注册页面正常工作(从而排除了common.php文件的内容是一个问题),并在mySQL中检查了数据库正在填充,但我似乎无法使登录本身发布任何内容,而不是不成功。

我肯定是在数据库中输入用户名和密码。有人能看出我哪里出了问题,或者建议我如何检查哪里出了问题吗?

表jmp_users的结构如下:

jmp_userID / init(11) / auto_increment
jmp_username / varchar(30) / utf8_unicode_ci
jmp_password / varchar(40) / utf8_unicode_ci
salt / char(16) / utf8_unicode_ci

我的login.php页面是:

<?php 

require("common.php"); 

$submitted_username = ''; 

if(!empty($_POST)) 
{ 
    $query = " 
        SELECT 
            jmp_userID, 
            jmp_username, 
            jmp_password, 
            salt 
        FROM jmp_users 
        WHERE 
            jmp_username = :username 
    "; 
    $query_params = array( 
        ':username' => $_POST['jmp_username'] 
    ); 

    try 
    { 
        $stmt = $db->prepare($query); 
        $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    {  
        die("Failed to run query: " . $ex->getMessage()); 
    }  
    $login_ok = false; 
    $row = $stmt->fetch(); 
    if($row) 
    { 
        $check_password = hash('sha256', $_POST['jmp_password'] . $row['salt']); 
        for($round = 0; $round < 65536; $round++) 
        { 
            $check_password = hash('sha256', $check_password . $row['salt']); 
        } 

        if($check_password === $row['jmp_password']) 
        { 
            $login_ok = true; 
        } 
    } 
    if($login_ok) 
    { 
        unset($row['salt']); 
        unset($row['jmp_password']); 
        $_SESSION['user'] = $row; 
        header("Location: private.php"); 
        die("Redirecting to: private.php"); 
    } 
    else 
    { 
        print("Login Failed."); 
        $submitted_username = htmlentities($_POST['jmp_username'], ENT_QUOTES, 'UTF-8'); 
    } 
} 

?> 
<h1>Login</h1> 
<form action="login.php" method="post"> 
    Username:<br /> 
    <input type="text" name="username" value="<?php echo $submitted_username; ?>" /> 
    <br /><br /> 
Password:<br /> 
<input type="password" name="password" value="" /> 
<br /><br /> 
<input type="submit" value="Login" /> 
</form> 
<a href="register.php">Register</a>

共有1个答案

昌正奇
2023-03-14

由于您使用SHA256(带有十六进制值,不是原始值),您需要64个字符来存储密码的哈希值(您只有40个字符)。

顺便说一句:我认为重新哈希密码65536次是不必要的,而且会浪费CPU。此外,通常所有密码都使用一个salt字符串。

 类似资料:
  • 我使用Volley、php、MYSQL和共享首选项创建了我的登录应用程序。登录和注册活动成功,但登录成功后页面不会转到其他活动。这是一个意图还是另一个问题?请救命! 登录activity:

  • 我已经创建了一个登录名。html页面和登录名。php脚本。在脚本中,它将首先获得我们输入的用户名和密码,然后使用数据库检查用户名或密码是否存在,如果用户有效,则它将检查他的部门id,并使用部门权限打开他们的页面,但问题是无论他们的部门是什么,都会一直打开管理页面。请帮我做这件事。 这是我的login.html代码 登录。php脚本

  • 问题内容: 通过ajax提交登录表单时,我只是遇到一些问题,我主要是PHP开发人员,在PHP中我并不经常使用Jquery + Ajax。 目前,如果我在提交表单后检查firebug POST数据,它的确会获取已添加到表单的用户名和密码,但是无论是否添加了错误的用户名和密码,或者是否添加了错误的页面,页面都只会重新加载它们是正确的,并且没有创建会话。 形式如下: 这是Ajax / Jquery: 这

  • 我正在用android编程。当我使用(LoginActivity)成功登录时,下一步是加载MainActivity,这个MainActivity是一个导航抽屉活动,但我遇到了这个错误: 致命异常:主进程:com.example.administrador.vicon,PID:32149java.lang.运行时异常:无法启动活动ComponentInfo{com.example.administr

  • 我需要用PHP和SQlite做一个登录表单。注册有效,我可以选择所有创建的用户并回显它们。当我试图检查用户名和密码(我通过$u POST获得的)是否匹配时:它回显我现在已登录。但当我输入错误的user/pw时,它会回显“invalid”-字符串,但也有以下错误: 第17行是我得到if($row['username']的地方... 这是我的代码: 这里怎么了?

  • 本文向大家介绍php+MySQL实现登录时验证登录名和密码是否正确,包括了php+MySQL实现登录时验证登录名和密码是否正确的使用技巧和注意事项,需要的朋友参考一下 直入主题,先看php校验登录名和密码是否正确的代码: 效果图: 以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。