Авторизация PHP и MySQL с Запоминанием Пользователей
Создание системы авторизации на основе PHP и базы данных MySQL — это стандартная задача для веб-разработчиков. В данной статье рассмотрим, как можно организовать процесс авторизации пользователей и запомнить информацию о них с использованием cookies или sesions.
Настройка базы данных
Для начала создадим таблицу в базе данных MySQL для хранения информации о пользователях:
«`sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL
);
«`
В этой таблице `username` — это уникальное имя пользователя, а `password_hash` хранит хеш пароля для обеспечения безопасности данных.
Регистрация пользователей
Для регистрации нового пользователя необходимо собрать данные формы и сохранить их в базе:
«`php
if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’) {
$username = $_POST[‘username’];
$password = $_POST[‘password’];
// Хеширование пароля
$password_hash = password_hash($password, PASSWORD_BCRYPT);
// Подключение к базе данных
$pdo = new PDO(‘mysql:host=localhost;dbname=mydatabase’, ‘root’, »);
// Запрос на вставку нового пользователя
$stmt = $pdo->prepare(INSERT INTO users (username, password_hash) VALUES (?, ?));
$stmt->execute([$username, $password_hash]);
echo Регистрация успешна!;
}
?>
«`
Авторизация пользователей
При авторизации мы проверяем введённые данные:
«`php
session_start();
if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’) {
$username = $_POST[‘username’];
$password = $_POST[‘password’];
// Подключение к базе данных
$pdo = new PDO(‘mysql:host=localhost;dbname=mydatabase’, ‘root’, »);
// Запрос на поиск пользователя
$stmt = $pdo->prepare(SELECT * FROM users WHERE username = ?);
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user[‘password_hash’])) {
$_SESSION[‘logged_in’] = true;
$_SESSION[‘user_id’] = $user[‘id’];
// Установка cookie для запоминания пользователя
setcookie(‘remember_me’, hash(‘sha256’, $username . time()), time() + (86400 * 30), /);
echo Авторизация успешна!;
} else {
echo Неправильное имя пользователя или пароль.;
}
}
?>
«`
Запоминание пользователей
Используя cookies, можно запомнить пользователя:
«`php
session_start();
if (!isset($_SESSION[‘logged_in’]) && isset($_COOKIE[‘remember_me’])) {
$username = hash(‘sha256’, $_COOKIE[‘remember_me’]);
// Подключение к базе данных
$pdo = new PDO(‘mysql:host=localhost;dbname=mydatabase’, ‘root’, »);
// Запрос на поиск пользователя
$stmt = $pdo->prepare(SELECT * FROM users WHERE username = ?);
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user) {
$_SESSION[‘logged_in’] = true;
$_SESSION[‘user_id’] = $user[‘id’];
}
}
?>
«`
Логаут
Для выхода из системы необходимо очистить сессию и удалить cookie:
«`php
session_start();
// Удаление сессии
$_SESSION = array();
session_destroy();
// Удаление cookie
setcookie(‘remember_me’, », time() — 3600, /);
echo Вы вышли из системы.;
?>
«`
Заключение
Использование PHP и MySQL для авторизации пользователей с возможностью запоминания состояния сессии является распространённым подходом. Применение хеш-функций для паролей и cookies для длительного входа пользователя помогает повысить безопасность и удобство использования приложения.