php登录pdo更新

php登录pdo更新,php,mysql,pdo,Php,Mysql,Pdo,所以我试图转到PDO连接,但我现在真的被卡住了。现在需要一些帮助。包括-my login.php和我的类文件。我也知道MD5根本不安全,在修复过程中也是如此。 非常感谢。 if(isset($_POST['submit'])) { $object = new Login(); $object->verifyDatabase(); if($object->isLoggedIn()) header('location: index.php'); else

所以我试图转到PDO连接,但我现在真的被卡住了。现在需要一些帮助。包括-my login.php和我的类文件。我也知道MD5根本不安全,在修复过程中也是如此。 非常感谢。
if(isset($_POST['submit'])) {

  $object = new Login();
  $object->verifyDatabase();

  if($object->isLoggedIn())
     header('location: index.php');
  else
    $object->showErrors();

}
$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    Username: <input type="text" name="username"/>
    Password: <input type="password" name="password"/>
    <input type="hidden" name="token" value="<?php echo $token;?>" />
    <input type="submit" name="submit" value="Login"/>
if(isset($\u POST['submit'])){
$object=新登录名();
$object->verifyDatabase();
如果($object->isLoggedIn())
标题('location:index.php');
其他的
$object->showErrors();
}
$token=$_会话['token']=md5(uniqid(mt_rand(),true));
?>

带有参数的查询语法不正确。如果使用的是位置参数,则需要按如下方式编写查询:

SELECT * FROM users WHERE username=? AND password=?

带有参数的查询语法不正确。如果使用的是位置参数,则需要按如下方式编写查询:

SELECT * FROM users WHERE username=? AND password=?

会话令牌看起来很好,因为它是唯一的,只有当您知道您的会话是安全的时,它才应该很好。您可能希望将会话令牌设置为数组(如果用户打开多个页面并提交较旧的页面,则该页面将无效,因为该页面已被覆盖),并可能添加一个expire变量
$\u服务器['PHP\u SELF']
不应使用:
$\u服务器['SCRIPT\u NAME']
您的
verifyDatabase()
方法
bindParam
错误将查询中的值更改为
您的密码检查有点弱。您可能希望允许任何字符/具有2个上限/特殊/数字,而不限制max1)您不应该在类中使用超全局字符,如
$\u POST
。相反,构造函数不应该做太多的工作。它应该只初始化状态。仅此而已。还要了解依赖项注入和srp会话令牌看起来很好,因为它是唯一的,只有当您知道您的会话是安全的时,它才应该很好。您可能希望将会话令牌设置为数组(如果用户打开多个页面并提交较旧的页面,则该页面将无效,因为该页面已被覆盖),并可能添加一个expire变量
$\u服务器['PHP\u SELF']
不应使用:
$\u服务器['SCRIPT\u NAME']
您的
verifyDatabase()
方法
bindParam
错误将查询中的值更改为
您的密码检查有点弱。您可能希望允许任何字符/具有2个上限/特殊/数字,而不限制max1)您不应该在类中使用超全局字符,如
$\u POST
。相反,构造函数不应该做太多的工作。它应该只初始化状态。除此之外,您还可以了解依赖项注入和SRP