PHP - MySQL Аутентификация: Пособие для начинающих
Здравствуйте, начинающие веб-разработчики! Сегодня мы отправимся в увлекательное путешествие в мир PHP и MySQL, чтобы создать простой, но мощную систему аутентификации. Кто-то, кто уже много лет teaches это, может сказать вам, что овладение этим навыком похоже на открывание тайной двери в мире веб-разработки. Итак, натянем рукава и окунемся в это!
Понимание большой картины
Прежде чем мы начнем программировать, давайте на минутку подумаем, что мы пытаемся достичь. Представьте, что вы строите treehouse. Вам нужна прочная основа, стены, крыша и способ входа и выхода. Наша система аутентификации PHP-MySQL аналогична:
- Config.php: Это наша основа, которая connect нас к базе данных.
- Login.php: Представьте это как дверь к нашему treehouse.
- Session.php: Это отслеживает, кто находится внутри treehouse.
- Welcome.php: Уютное помещение, где авторизованные пользователи проводят время.
- Logout.php: Tabличка с выходом, показывающая пользователям путь наружу.
Теперь давайте построим каждую часть шаг за шагом!
Config.php: Построение фундамента
Этот файл похож на тайный握手 между PHP и MySQL. Это место, где мы храним наши данные для подключения к базе данных.
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');
$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if($conn === false){
die("ОШИБКА: Невозможно подключиться. " . mysqli_connect_error());
}
?>
Давайте разберем это:
- Мы используем
define()
для установки констант для наших данных базы данных. -
mysqli_connect()
устанавливает подключение к нашей базе данных MySQL. - Если подключение не удается, мы используем
die()
для остановки выполнения и отображения сообщения об ошибке.
Совет профессионала: Никогда не делитесь своими реальными данными для подключения к базе данных! Этот пример использует значения по умолчанию, но в реальном проекте храните их в секрете!
Login.php: Страж ворот
Это место, где происходит магия. Пользователи вводят свои данные для входа, и мы проверяем, разрешено ли им войти.
<?php
session_start();
require_once "config.php";
if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
$sql = "SELECT id, username, password FROM users WHERE username = ?";
if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Неправильное имя пользователя или пароль.";
}
}
} else{
$login_err = "Неправильное имя пользователя или пароль.";
}
} else{
echo "Ой! Произошла ошибка. Пожалуйста, попробуйте еще раз позже.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Вход</title>
</head>
<body>
<h2>Вход</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Имя пользователя</label>
<input type="text" name="username" required>
</div>
<div>
<label>Пароль</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Войти">
</div>
</form>
</body>
</html>
Вау, это много информации для восприятия! Давайте разберем это:
- Мы начинаем сеанс и включаем наш config файл.
- Мы проверяем, был ли отправлен form с помощью POST.
- Мы используем prepared statements, чтобы предотвратить SQL injection (распространенную уязвимость безопасности).
- Мы проверяем пароль с помощью
password_verify()
(всегда храните пароли в зашифрованном виде в реальных проектах!). - Если вход успешен, мы устанавливаем variables сеанса и перенаправляем на welcome.php.
- Мы также имеем простой HTML form для ввода данных пользователями.
помните, в реальных приложениях вы бы добавили больше мер безопасности и обработки ошибок!
Session.php: Охранник
Этот файл проверяет, вошел ли пользователь в систему. Если нет, он перенаправляет их на страницу входа.
<?php
session_start();
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>
Коротко и ясно! Этот код:
- Начинает сеанс.
- Проверяет, вошел ли пользователь в систему.
- Если нет, перенаправляет их на страницу входа.
Welcome.php: Зона ВИП
Это место, куда пользователи попадают после успешного входа в систему.
<?php
require_once "session.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Добро пожаловать</title>
</head>
<body>
<h1>Здравствуйте, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Добро пожаловать на наш сайт.</h1>
<p>
<a href="logout.php">Выйти</a>
</p>
</body>
</html>
Вот что происходит:
- Мы включаем session.php, чтобы убедиться, что только вошедшие в систему пользователи могут доступа к этой странице.
- Мы отображаем персонализированное приветственное сообщение, используя имя пользователя, хранящееся в сеансе.
- Мы предоставляем ссылку для выхода.
Logout.php: Выход
Наконец, нам нужно безопасно завершить сеанс пользователя.
<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>
Этот скрипт:
- Начинает сеанс.
- Удаляет все variables сеанса.
- Разрушает сеанс.
- Перенаправляет пользователя обратно на страницу входа.
Вся система вместе
Теперь, когда мы построили все части, давайте подведем итог, как они работают вместе:
Файл | Назначение | Основные функции |
---|---|---|
Config.php | Подключение к базе данных | mysqli_connect() |
Login.php | Проверка аутентификации пользователя | mysqli_prepare(), password_verify() |
Session.php | Управление сеансом | session_start(), $_SESSION проверки |
Welcome.php | Страница авторизованного пользователя | Отображение персонализированного контента |
Logout.php | Завершение сеанса пользователя | session_destroy() |
И вот оно! Вы только что создали базовую систему аутентификации PHP-MySQL. Помните, это только начало. В реальных приложениях вы бы добавили больше функций, таких как:
- Функция сброса пароля
- Опция "Запомнить меня"
- Более robust обработка ошибок
- Улучшенные меры безопасности
Продолжайте практиковаться, будьте любопытны, и скоро вы будете легко создавать сложные веб-приложения. Удачи в программировании, будущие веб-волшебники!
Credits: Image by storyset