簡體   English   中英

使用PDO進行PHP簡單登錄

[英]PHP Simple login with PDO

這是我的Controller類登錄檢查部分

案例“ checkLogin”:

        $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;

UserModel函數

這是我的用於檢查用戶名和密碼的用戶模型功能。

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-oriented-php-and-pdo

如果清除所有無用和錯誤的內容,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無關

這是MVC的良好初始框架,但是您的代碼需要工作。 幾個建議。

  1. 我會在密碼上使用更好的加密方法,這些天MD5有點過時了。
  2. 您正在構建一個框架,因此繼續以模塊化的方式進行思考,嘗試壓縮和簡化您的代碼,以便它基本上接受一個請求並返回一個結果,在其他地方處理無關緊要的事情。 例如,到您進入“案例檢查登錄”時,您的應用程序應該已經處理了該帖子,並檢查了該帖子是否已設置。

我之所以沒有發布代碼,是因為我得到了您正在像以前一樣自學的想法。.而我們要尋找的最后一件事是剪切和粘貼解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM