воскресенье, 21 января 2018 г.

Авторизация пользователей на PHP

Здравствуйте, коллеги по web-алхимии!
Вот такая функция, простая и рабочая создана мной для своих целей.

Часть первая (html-код)

<form action="" method=post>
<input type="text" id="login" name="login">
<input type="password" id="password" placeholder="пароль" name="password" oninput="var input = document.getElementById('password').value;heshmd5=md5(input);document.getElementById('md5pass').value = heshmd5;">
<input type=hidden id="md5pass" name="md5pass">
<button type="submit" class="button success columns expand">Войти</button>
</form>

Здесь на поле ввода пароля навешен js-скрипт, который при изменении значения в поле (ну, когда вы вводите пароль), хеширует значение в md5 и тут же присвает его в значение скрытого поля формы с id=md5pass

Таким образом сам пароль на сервер не отсылается, а передается только его хеш. Который можно усложнить добавлением соли, то есть прибавив к паролю какое-то секретное значение.

Здесь добавлю только, что функции md5 в JS не бывает, поэтому я пользовался функцией взятой отсюда .

Часть вторая (PHP)

В свой index.php я вставил инклюдом login.php, который выглядит так

<?php

$login=$_POST['login'];  // получаем значение post от формы
$md5pass=$_POST['md5pass'];  // получаем значение post от формы
$filename = '$_POST['login'].'/conf.php';  // конфигурируем предполагаемый путь к директории пользователя
if (file_exists($filename)){// если путь к директории существует, то инклудим его
    include ("$filename");
}

session_start();// открываем сессию. Это нужно на случай если ранее пользователь уже авторизировался
if(isset($_SESSION['login'])){// если уже авторизирован, то...
   $auth="Авторизированно";
}elseif(file_exists($filename)&$md5pass==$pass){ // если путь к директории пользователя существует и хеши паролей совпадают, то ...
    $auth="Авторизация успешна";
    $_SESSION['login'] = $login;// инициализируем переменную в сессии
}elseif(file_exists($filename)&$md5pass!=$pass){// хеши пароля не совпали и тогда ...
    $auth="Авторизация неуспешна";
}elseif (!file_exists($filename)&isset($_POST['md5pass'])){// нет директории такого пользователя, а значит ...
    $auth="Отсутствует пользователь";
}elseif(!isset($_GET["logout"])&!isset($md5pass)){// если это не разлогинивание и если поля формы не переданы, то это первоначальная загрузка страницы
    $auth="Неавторизированный вход";
}

if (isset($_GET["logout"])){// Разлогинились передачей get-запроса
    $auth="Разлогинивание успешно";
    session_unset();// уничтожили сессию
    session_destroy();
    header("Location: index.php");
    exit(); // после передачи редиректа всегда нужен exit или die
    // иначе выполнение скрипта продолжится.
}

/*
echo $login;// для проверки
echo "->";
echo $md5pass;
echo "<br>";
echo $auth;
*/
?>

Часть третья - использование внутри файлов и скриптов

Там где нужно разделить авторизированный и неавторизированный допуск, используем конструкцию

<? if (isset($_SESSION['login'])){
              echo " Здесь, то что относится к аккаунту пользователя";
     }else{
               echo " Здесь, то что видно всем";
      }



0 коммент.:

Отправить комментарий