PHP登录的哪种方式是最好的方式?

PHP登录的哪种方式是最好的方式?,php,sql,Php,Sql,我正在编写一个PHP脚本,需要登录。因此,我想根据一个带有用户名和密码的数据库检查输入。最好的方法是进行查询,比较post数据是否与数据库中的SQL函数“类似”?然后我计算mysql的行数。如果是零,我拒绝登录。如果是一个,我允许登录 这是一种常见且正确的方法,还是有更好的方法?我想要最好的现代方式。这就是我为什么也使用HTML5的原因。我的部分代码。为将来的cookie登录设置cookie,并在会话中设置尝试,以在尝试次数超过一定登录次数时显示验证码。 希望你能理解一点 签到电话 if($t

我正在编写一个PHP脚本,需要登录。因此,我想根据一个带有用户名和密码的数据库检查输入。最好的方法是进行查询,比较post数据是否与数据库中的SQL函数“类似”?然后我计算mysql的行数。如果是零,我拒绝登录。如果是一个,我允许登录


这是一种常见且正确的方法,还是有更好的方法?我想要最好的现代方式。这就是我为什么也使用HTML5的原因。

我的部分代码。为将来的cookie登录设置cookie,并在会话中设置尝试,以在尝试次数超过一定登录次数时显示验证码。 希望你能理解一点

签到电话

 if($this->check_signin_errors()) {
    if($this->signin($this->user_email, sha1($this->user_pass))) { //$user_pass hashed
      header("Location: /account/");
      exit();
    } else {
      $this->generate_captcha();  
    }
    return true;
  }
符号功能

  private function signin($user_email, $user_pass) {
    global $con;
    $query = mysqli_query($con, "SELECT *, COUNT(id) FROM `accounts` WHERE `user_email` = '".mysqli_real_escape_string($con, $user_email)."' AND `user_pass` = '".mysqli_real_escape_string($con, $user_pass)."' AND access_level >= '0'");
    $result = mysqli_fetch_assoc($query);
    if($result['COUNT(id)'] > 0) {
      $_SESSION['account_logged']        = true;
      $_SESSION['user_id']               = $result['id'];
      $_SESSION['user_email']            = $result['user_email'];
      $_SESSION['user_pass']             = $result['user_pass'];
      $_SESSION['access_key']            = $result['access_key'];
      $_SESSION['access_level']          = $result['access_level'];

      $this->set_cookie('cookie_name', '1/'.$_SESSION['user_email'].'/'.$_SESSION['user_pass'], 7776000);

      $_SESSION['attempt'] = 1;
      return true;
    }   
    $_SESSION['account_logged'] = false;
    $_SESSION['attempt'] = $_SESSION['attempt'] + 1; 
    $this->throw_error(5);  
    return false;    
  }

最新的方法是使用函数

而且因为还不是每个人都使用5.5,所以在早期的PHP版本中还没有实现它的方法

因为散列密码使用动态salt,即为每个用户单独生成的随机字符串,所以在登录时,您实际上需要读取用户数据库以获取当前散列,因为当您要比较登录密码时,需要将散列作为密码验证函数的第二个输入

因此,实际上,如果您发现数据库中的用户没有像这里这样使用,您可以尝试使用占位符进行搜索-您的用户应该能够正确键入其用户名。如果没有找到:没有登录。如果找到两个:您应该为用户名添加唯一索引,否则您将有两个同名用户


如果找到一个条目,请阅读该条目,比较哈希值,然后允许他进一步输入。

您尝试过什么吗?您的意思是什么?我知道不同的方法,但我想使用最好的方法,因为我不喜欢使用旧的不推荐的方法。你不能使用像但在哪里!如果输入中的哈希值与sql密码字段匹配,则设置会话等。如果db result不大于0,则不创建会话,以此类推,很简单。HTML5与此无关。您需要进行一些研究并尝试一些方法,以便我们可以更正您的代码。我们不是来为你编写代码的。试着自己编写一些东西,如果它不起作用,具体地告诉我们你做了什么,这样我们就可以帮助你。你开始,我们帮助。我们不是为你写的。向我们展示您尝试过的实际代码,然后我们可以从中帮助您。如果你先亲自尝试,你很可能会非常接近答案。