Я пытаюсь создать страницу входа в систему, которая запрашивает базу данных, чтобы проверить правильность имени пользователя и пароля, и разрешает доступ к следующим страницам с помощью сеансов. В настоящее время я просто использую 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» для обоих наборов user / passwords в базе данных, а не в ней. Они оба отображают «нет пользователя», поэтому я не думаю, что я ищу базу данных правильно. Я новичок в PHP, и я использовал этот код .
UPDATE
Благодаря комментариям исправлены пароли, чтобы они были хешированы.
Когда он все еще не работал:
Установить тип данных пароля в базе данных как VARCHAR (60), рекомендуется VARCHAR (255)
Я понял, что это потому, что для меня установлен тип данных пароля VARCHAR (40). Поскольку я использовал bycrypt для хэширования, это строка из 60 символов. Я установил свой пароль на рекомендованный VARCHAR (255) на случай, если я решу использовать PASSWORD_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, чтобы он продолжал перенаправлять меня к логину.