首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phpass登录不起作用

Phpass登录不起作用
EN

Stack Overflow用户
提问于 2013-04-23 03:22:02
回答 2查看 276关注 0票数 0

我正在更改我的注册表和登录到不同的加密(Phpass),因为每个人都说md5不再安全。我设法让自己的注册功能工作,但不明白为什么登录不工作。此代码运行时没有错误,但它不是从此行传递的if($stm->rowCount()>0){}

请忽略注释代码,这是我的旧登录版本。欢迎任何其他建议!

代码语言:javascript
复制
  include("include/connection.php");
        require_once('include/PasswordHash.php');

        function login($db){
            if (isset($_GET["type"])){  
                if($_GET["type"]=="log" && isset($_POST['email']) && isset($_POST['password'])){

                    session_start();

                    $email = $_POST['email'];
                    $password = $_POST['password'];
                    $hasher = new PasswordHash(8, false);

                    if($email=='' || $password==''){
                        echo "<font style='background-color: #F9C5CA'>Error: Please fill the required fields.</font>";
                    }else{

                        //$password = md5($password);
                        $pass = $hasher->HashPassword($_POST['password']);

                        $sql = "SELECT email,password,id FROM user WHERE email=? AND password=?";
                        $stm = $db->prepare($sql);
                        $stm->execute(array($email,$pass));
                        $row = $stm->fetch(PDO::FETCH_ASSOC);

                        /*if($stm->rowCount()>0){

                            $_SESSION['id']=$row['id'];
                            header('Location: cpanel/#welcome');
                        }else{
                            echo "<font style='background-color: #F9C5CA'>Error: Your email and/or password are incorrect. Please try again.</font>";
                        }*/

                        if($stm->rowCount()>0){
                            if ($hasher->CheckPassword($pass,$row['password'])) {
                                $_SESSION['id']=$row['id'];
                                header('Location: cpanel/#welcome');
                                exit();

                            }else{
                                echo "<font style='background-color: #F9C5CA'>Error: Your email and/or password are incorrect. Please try again.</font>";
                            }
                        }
                    }
                }
            }
        }
EN

回答 2

Stack Overflow用户

发布于 2013-04-23 03:42:10

您可以更改条件,因为有几种方法可以替换rowCount()

如果用户存在,则$row = $stm->fetch(PDO::FETCH_ASSOC);返回一个包含数据的数组,如果没有用户,则返回一个空数组:

代码语言:javascript
复制
// Count array and check if is greater than 0
if ( count($row) > 0 )
// Check if array is not empty
if ( !empty($row) )
// Simple check. An empty array would return false
if ( $row )
票数 0
EN

Stack Overflow用户

发布于 2013-11-07 18:40:56

确保散列密码为60个字符,否则将返回false。我遇到了同样的问题,注意到我的第一个哈希密码是61个字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16155059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档