0

这是我的控制器类登录检查部分

案例“检查登录”:

        $username   = isset($_REQUEST['username']) ? trim($_REQUEST['username']) : "";
        $password   = isset($_REQUEST['password']) ? trim($_REQUEST['password']) : "";


        try{

            $login = $user->login($username,$password);

            if ($login === false) {
                throw new Exception("username or password is wrong");
            }else {

                $_SESSION['id'] =  $login;
                header('Location: index.php');

            }

        }
        catch(Exception $ex){

            $errMsg = $ex->getMessage();

            $view->render('view/login.php', array('errMsg' => $errMsg ));
        }   

        break;

用户模型函数

这是我用于检查用户名和密码的用户模型功能。

public function login($username,$password){

    $username = strip_tags(stripslashes(mysql_real_escape_string($username)));

    $password = strip_tags(stripslashes(mysql_real_escape_string($password)));


    $stmt = $this->db->con->prepare("SELECT `password`, `id` FROM `user` WHERE `username` = ?");
    $stmt->bindValue(1, $username);

    try{

        $stmt->execute();
        $data               = $stmt->fetch();

        $stored_password    = $data['password'];
        $id                 = $data['id'];


        if($stored_password === md5($password)){
            return $id; 
        }else{
            return false;   
        }

    }catch(PDOException $e){
        echo $e->getMessage();
    }

}

请告诉我这是对的。这段代码对我有用。我正在使用它来实现基本的 MVC 模式登录。

我从这里得到了一些代码 http://www.sunnytuts.com/article/login-and-registration-with-object-orientation-php-and-pdo

4

2 回答 2

1

如果去掉所有无用和错误的东西,login() 就会变成这样

public function login($username, $password)
{
    $stmt = $this->db->prepare("SELECT password, id FROM user WHERE username = ?");
    $stmt->execute(array($username));
    $row = $stmt->fetch();
    if(crypt($password, $row['password']) == $row['password'])
    {
        return $id; 
    }
}

注意更好的密码哈希算法

必须对其他代码部分执行类似的操作:

    $login = $user->login($_POST['username'], $_POST['username']);
    if ($login)
    {
            $_SESSION['id'] =  $login;
            header('Location: index.php');
            exit;
    }
    $view->render('view/login.php', array('errMsg' => "Wrong credentials" ));
    break;

是的,它与 MVC 关系不大

于 2013-10-02T17:31:23.453 回答
-1

这是一个很好的 MVC 初始框架,但您的代码需要工作。几个建议。

  1. 我会在密码上使用更好的加密方法,MD5 这些天有点过时了。
  2. 你正在制作一个框架,所以继续以模块化的方式思考,尝试压缩和简化你的代码,以便它基本上接受请求并返回结果,在其他地方处理无关的东西。例如,当您在“case checklogin”时,您的应用程序应该已经处理了帖子并检查了帖子是否已设置。

我没有发布代码,因为我知道你是在自学,就像我曾经做过的那样......我们最不想要的就是剪切和粘贴解决方案。

于 2013-10-02T17:40:56.733 回答