0

これは私の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-directional-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 に答える