Авторизация на PHP без базы данных

    Комментариев нет 161

autorisation-on-php

Привет. В этом уроке мы рассмотрим пример реализации авторизации на PHP без использования базы данных. Логин и пароль будем хранить в обычном текстовом файле. Это бывает нужно, когда нет времени или возможности создавать БД и к какой-либо странице на сайте нужно сделать доступ для пользователя по паролю. Соответственно использовать будем сессии и напишем свой скрипт авторизации, который вы сможете скачать и использовать для своих нужд. Давайте приступим.

Телеграм-канал serblog.ru

Демо

Во-первых создадим файл с именем login.php в напишем форму, в которую юзер будет вбивать логин и пароль. Я буду использовать библиотеку Bootstrap. Выглядеть она будет примерно так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form method="POST">
  <div class="form-col">
     <div class="form-group col-md-6">
     <label for="exampleInputEmail1">Логин</label>
      <input type="text" class="form-control" id="exampleInputEmail1" name="username"/>
      </div>
       <div class="form-group col-md-6">
          <label for="exampleInputPassword1">Пароль</label>
          <input type="password" class="form-control" id="exampleInputPassword1" name="password" placeholder="Пароль"/>
        </div>
        <div class="form-group col-md-6">
         < ?php echo $err; ?>
         <button type="submit" class="btn btn-primary">Войти</button>
        </div>
 
       </div>
</form>

В самом начале этого файла пишем проверку на соответствие введенных данных с данными из файла, который мы создадим чуть позже. И если эти данные подходят, то перенаправляем пользователя на страницу profile.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
session_start();
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $users = file('users.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $err = '';
    foreach ($users as $user) {
        list($storedUsername, $hashedPassword) = explode(':', $user);
 
        if ($username === $storedUsername && password_verify($password, $hashedPassword)) {
            $_SESSION['username'] = $username;
            header('Location: /auto/profile.php');
            exit();
        }
    }
 
    $err = '<small class="form-text text-danger mb-2">Неверное имя пользователя или пароль.</small>';
}

Создаем страницу profile.php

Так же делаем проверку на существование сессии.

1
2
3
4
5
6
7
8
session_start();
 
if (!isset($_SESSION['username'])) {
    header('Location: login.php');
    exit();
}
 
$username = $_SESSION['username'];

И на этой же странице пишем приветствие и ссылку на выход.

1
2
3
4
<div class="col-12">
  <h5>Добро пожаловать, < ?php echo $username ?></h5>
  <p>Вы получили доступ к зарытому контенту. <a href="logout.php">Выйти</a></p>
</div>

Файл users.txt

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

1
2
admin:$2y$10$avqVtJ9.094LjoqXdWYjiu2BhOufbukbKoRMd6RnIBIMTRZ2qLUeW
user2:$2y$10$avqVtJ9.094LjoqXdWYjiu2BhOufbukbKoRMd6RnIBIMTRZ2qLUeW

Выход из системы

Теперь подготовим файл выхода logout.php, который будет очищать сессию.

1
2
3
4
session_start();
session_destroy();
header('Location: login.php');
exit();

Авторизация на PHP без базы данных до безобразия проста, но в то же время полностью рабочая и если нужно запаролить какую-либо страницу на сайте, то этот способ вполне может подойти.

СКАЧАТЬ

Любая сумма на развитие сайта

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *