我正在尝试创建一个登录页面,查询数据库以检查用户名和密码是否有效,并允许使用会话访问以下页面。目前,我只是使用xampp来测试登录。这是我在php页面中的以下代码。
<?php
include("config.php");
session_start();
// Check for POST method
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = stripslashes($_POST['username']);
$username = mysqli_real_escape_string($con, $username);
$password = stripslashes($_POST['password']);
$password = mysqli_real_escape_string($con, $password);
//Search database for username and password
$stmt = $con->prepare("SELECT * FROM users
WHERE username = ? LIMIT 1"); // Prepared statement
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_object();
if(password_verify($_POST['password'], $user->password)) {
echo("working");
$_SESSION['loggedin'] = true;
$_SESSION['user'] = $user->username;
header("Location: index.php");
} else {
echo("no user");
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Login</title>
</head>
<body>
<form id="loginForm" method="post" action="">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<input type="submit" name="submit" value="Login">
</form>
</body>
</html>
我添加了一个echo语句,只是想看看它是否会为数据库中的用户/密码集而不是数据库中的用户/密码集输出“no user”。它们都显示“no user”,所以我认为我没有正确地搜索数据库。我对php有点陌生,我使用了以下代码。
更新
多亏了注解,修复了密码,所以它们被散列了。
当它仍然不起作用时:
将数据库中的密码数据类型设置为varchar(60),建议使用varchar(255)
我意识到这是因为我的密码数据类型设置为varchar(40)。因为我使用bycrypt来散列,所以它是一个60个字符的字符串。我将密码设置为推荐的varchar(255),以防将来决定使用password\u default。我没意识到这都是在书中提到的 password_hash()
最初创建数据库和字段时的文档。
补充 session_start()
所有页面引用 $_SESSION[]
回响 var_dump()
显示结果 password_verify()
他回来了 true
但是,当我输入正确的信息时,页面仍然不断地将我重定向到登录。在我重定向到的php中,我有以下代码部分:
<?php
if($_SESSION['loggedin'] == false) {
header("Location: login.php");
} else {
}
?>
我忘了放 session_start();
在php页面,所以它不断重定向到登录我。
暂无答案!
目前还没有任何答案,快来回答吧!