Login php как сделать

Изучаем простой пример создания безопасного логина в PHP и аутентификации пользователя. Включает в себя разбор кода и подробные инструкции.

Создание страницы авторизации на PHP

Для создания страницы авторизации на PHP необходимо сначала создать HTML-форму с полями для ввода логина и пароля. Например, ниже приведен пример формы:


<form action="login.php" method="post">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="Login">
</form>

Затем нам нужно создать скрипт PHP для обработки формы. Для этого мы используем метод POST для передачи данных, которые пользователь ввел в форме. Наш скрипт должен получать данные и проверять их с данными из базы данных. Если данные совпадают, то пользователь будет успешно авторизован. Если же данные не совпадают, то пользователь будет перенаправлен на страницу с ошибкой. Ниже приведен пример скрипта PHP для авторизации:


<?php
    // Переменные с формы
    $username = $_POST['username'];
    $password = $_POST['password'];
 
    // Параметры для подключения
    $db_host = "localhost";
    $db_user = "root"; // Логин БД
    $db_password = ""; // Пароль БД
    $db_base = 'test'; // Имя БД
    $db_table = "users"; // Имя Таблицы БД
 
    // Подключение к базе данных
    $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
 
    // Если есть ошибка соединения, выводим её и убиваем подключение
    if ($mysqli->connect_error) {
        die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }
 
    // Вытаскиваем из БД запись, у которой логин равняеться введенному
    $result = $mysqli->query("SELECT * FROM ".$db_table." WHERE login='$username'");
    $user = $result->fetch_assoc();
 
    // Сравниваем пароли
    if($user['password'] == $password) {
        // Генерируем случайное число и шифруем его
        $hash = md5(generateCode(10));
         
        // Записываем в БД новый хеш авторизации и IP
        $mysqli->query("UPDATE ".$db_table." SET hash='".$hash."' ".$insip." WHERE user_id='".$user['user_id']."'");
         
        // Ставим куки
        setcookie("id", $user['user_id'], time()+60*60*24*30);
        setcookie("hash", $hash, time()+60*60*24*30);
         
        // Переадресовываем браузер на страницу проверки нашего скрипта
        header("Location: check.php"); exit();
    }
    else {
        print "Вы ввели неправильный логин/пароль";
    }
?>

В примере выше мы используем функцию generateCode() для генерации случайной строки. Эта функция может выглядеть следующим образом:


<?php
    // Функция для генерации случайной строки
    function generateCode($length=6) {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
        $code = "";
        $clen = strlen($chars) - 1;
        while (strlen($code) < $length) {
                $code .= $chars[mt_rand(0,$clen)];
        }
        return $code;
    }
?>

После этого нам нужно создать скрипт для проверки авторизации. Этот скрипт будет проверять наличие куки и данные из базы данных. Если данные совпадают, то пользователь будет перенаправлен на страницу с его профилем. В противном случае, пользователь будет перенаправлен на страницу авторизации. Ниже приведен пример скрипта для проверки авторизации:


<?php
    // Параметры для подключения
    $db_host = "localhost";
    $db_user = "root"; // Логин БД
    $db_password = ""; // Пароль БД
    $db_base = 'test'; // Имя БД
    $db_table = "users"; // Имя Таблицы БД
 
    // Подключение к базе данных
    $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
 
    // Если есть ошибка соединения, выводим её и убиваем подключение
    if ($mysqli->connect_error) {
        die('Ошибка : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }
 
    // Принимаем данные с куки
    $user_id = $_COOKIE['id'];
    $hash = $_COOKIE['hash'];
 
    // Вытаскиваем данные из БД
    $result = $mysqli->query("SELECT *,INET_NTOA(user_ip) AS user_ip FROM ".$db_table." WHERE user_id = '$user_id' LIMIT 1");
    $userdata = $result->fetch_assoc();
 
    // Сравниваем полученные данные с данными из базы данных
    if(($userdata['user_hash'] !== $hash) OR ($userdata['user_id'] !== $user_id))
    {
        // Если данные не сошлись
        setcookie("id", "", time() - 3600*24*30*12, "/");
        setcookie("hash", "", time() - 3600*24*30*12, "/");
        print "Хм, что-то не получилось";
    }
    else
    {
        // Если данные совпадают, проверяем активирован ли аккаунт
        if($userdata['user_active'] == 0)
        {
            // Если не активирован, то просим активировать
            print "Аккаунт не активирован. Пройдите по ссылке, указанной в письме";
        }
        else
        {
            // Если активирован, проверяем данные для проверки подлинности
            $browser = getBrowser($_SERVER['HTTP_USER_AGENT']);
            if($userdata['user_browser'] != $browser)
            {
                // Если браузер не сошелся
                print "Вход в систему невозможен";
            }
            else
            {										

Ответы (0)