PHP PDO登录脚本不起作用。包含错误

时间:2013-09-26 17:49:59

标签: php mysql authentication login pdo

我对安全性不太熟悉,因此我依赖于我在互联网上找到的内容。我找到了一个人的网站,他解释了他的所作所为以及他的方法是如何运作的。人们可以复制粘贴它来缓解事情。 虽然我确实理解了很多,但我自己也无法想出来(我是PHP / XHTML等新手)。

网站:How to store safely with PHP and MySQL

他在他的教程中使用PDO。我能够将信息存储在数据库中。但是当我尝试使用他提供实际登录代码的脚本时,虽然它似乎包含错误。

我已经完成了所有工作并且一切正常,但是散列密码与插入的密码(使用哈希等)的比较无法正常工作。

这里发生了什么?

提前致谢!

修改

人们一直在要求代码,这里是:

session_start();  
  require('config.php');

  // Setting up a connection
  $MyConnection = new PDO('mysql:host=*;dbname=*', $dbuser, $pass);

  // Retrieving information from form.
  $username = $_POST['username'];
  $password = $_POST['password'];

  $sth = $MyConnection->prepare("SELECT * FROM AMP_Users WHERE Username = :username LIMIT 1");
  $sth->bindParam(':username', $username);
  $sth->execute();

  $user = $sth->fetch(PDO::FETCH_OBJ);

  // Hashing the password with its hash as the salt returns the same hash
  if (crypt($password, $user->hash) == $user->hash) {
    echo 'You are now logged in. If we actually used sessions this time.';
  }

一旦代码开始工作,我将添加$ _SESSION ['name'] = $ username。到现在为止,如果它成功与否,我只是回应一下。并且它没有显示任何内容,因此它不起作用。

第二次编辑

就像快速更新一样,我提供的脚本是WHOLE脚本。什么都没发泄。 (除了数据库名称等) 因此,我想知道问题可能是我不使用将密码保存到数据库中的哈希脚本。虽然我已经把它放入,但它仍然没有回应。我还在做错什么吗?

4 个答案:

答案 0 :(得分:0)

也许您必须检查在数据库中存储密码的字段的长度...如果长度很小,则散列密码将不会整体存储..您将存储其中的一部分!

答案 1 :(得分:0)

if($_POST):

     $name = $_POST['username'];
     $pass = crypt($_POST['password'], '$2a$07$Hd893nD39Jdjd48Jdh3nD$');

     $conn = new PDO('mysql:host=*; dbname=*', 'root', '');
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);    

     $stmt  = $conn->prepare('SELECT * FROM user WHERE name = ? AND password = ?');
     $stmt->execute(array($name, $pass));

     if($stmt->rowCount() === 0){
         echo 'Your Username / Password is incorrect. Please try again';
     }else{
         echo 'login success';
     }

    endif;

答案 2 :(得分:0)

我将其修改为在mysqli中运行并且工作正常:

            $getAuth=$dbConAU->prepare("SELECT Password FROM Users WHERE UserName=? LIMIT 1");

            $getAuth->bind_param("s",$UserName);
            $getAuth->execute();
            $getAuth->bind_result($hash);
            $getAuth->fetch();
            $getAuth->close();

            if (crypt($Password, $hash) == $hash) {
                return "OK";
                }
                else { return "Not OK"; }

答案 3 :(得分:0)

我知道这个帖子已经有几个月了,但有人可能会发现这个 SunnyTuts php pdo login and registration tutorial

教程很有帮助。我找到了这个线程和教程,同时寻找一种允许用户登录的安全方式。作为php和网页设计的新手我发现它有点难以理解,但我确信它对你们中的某些人来说似乎是小菜一碟....

相关问题