php - 创建博客但 mysql php 密码问题

标签 php mysql blogs

我正在使用 mysql 和 php 从头开始​​创建一个博客。

class.user.php代码:

    <?php

class User{

private $db;
public function __construct($db){
$this->db = $db;
}


public function is_logged_in(){
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
return true;
}   
}

public function create_hash($value)
{
return $hash = crypt($value, '$2a$12$'.substr(str_replace('+', '.', base64_encode(sha1(microtime(true), true))), 0, 22));
}

private function verify_hash($password,$hash)
{
return $hash == crypt($password, $hash);
}

private function get_user_hash($username){  

try {

//echo $this->create_hash('demo');

$stmt = $this->db->prepare('SELECT password FROM blog_members WHERE username = :username');
$stmt->execute(array('username' => $username));
$row = $stmt->fetch();
return $row['password'];

} catch(PDOException $e) {
echo '<p class="error">'.$e->getMessage().'</p>';
}
}

public function login($username,$password){ 

$hashed = $this->get_user_hash($username);
if($this->verify_hash($password,$hashed) == 1){
$_SESSION['loggedin'] = true;
return true;
}   
}
public function logout(){
session_destroy();
}
}

?>

连接到class.user.php的Login.php

    <?php
//include config
require_once('../includes/config.php');


//check if already logged in
if( $user->is_logged_in() ){ header('Location: index.php'); }
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Admin Login</title>
<link rel="stylesheet" href="../style/normalize.css">
<link rel="stylesheet" href="../style/main.css">
</head>
<body>

<div id="login">

<?php

//process login form if submitted
if(isset($_POST['submit'])){

$username = trim($_POST['username']);
$password = trim($_POST['password']);
if($user->login($username,$password)){

//logged in return to index page
header('Location: index.php');
exit;

} else {
$message = '<p class="error">Wrong username or password</p>';
}

}//end if submit

if(isset($message)){ echo $message; }
?>

<form action="" method="post">
<p><label>Username</label><input type="text" name="username" value="" /></p>
<p><label>Password</label><input type="password" name="password" value="" /></p>
<p><label></label><input type="submit" name="submit" value="Login" /></p>
</form>

</div>
</body>
</html>

我使用 phpmyAdmin 创建了该表,但是当我尝试登录时,它显示用户名和密码错误。我无法让它工作。有没有其他解决方法或其他方法可以做到这一点?

谢谢

最佳答案

有几件事......

为什么要重新发明轮子?

除非这是一个获取知识的练习,否则创建自己的博客系统有点极端,因为有大量开发良好的现成解决方案可以满足您的需求甚至更多。

回到你的问题...

当您为帐户创建用户密码时,您需要将盐与哈希密码一起存储在数据库中。然后,当您检查身份验证时,您会从数据库中获取盐和散列密码。然后,您使用现有盐对提交的密码进行哈希处理,并检查其与数据库中的哈希密码是否匹配。

您当前正在做的是从数据库获取散列密码,然后将其与 crypt($password, $db_password) 进行比较 - 这基本上意味着您正在对提交的用户进行散列密码与数据库中现有的散列密码,这当然永远不会匹配。

关于php - 创建博客但 mysql php 密码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23920128/

相关文章:

php - 使用 $.post 将 JS 变量发送到 PHP 脚本

mysql - 使用连接简化 mysql 查询

php - 为每个结果值显示多行

php - 通过桌面应用程序的博客界面

jekyll - jekyll 中帖子的点赞按钮

php - jquery checkall 复选框加重置

php - 我正在尝试根据发布时间戳将注册日期添加到 mysql 中

php - 提高 CakePHP 中的代码质量

mysql - 多行转单行查询结果

javascript - 来自 WordPress 的 YQL rss feed 设置限制