Привет. В этом уроке мы рассмотрим пример реализации авторизации на PHP без использования базы данных. Логин и пароль будем хранить в обычном текстовом файле. Это бывает нужно, когда нет времени или возможности создавать БД и к какой-либо странице на сайте нужно сделать доступ для пользователя по паролю. Соответственно использовать будем сессии и напишем свой скрипт авторизации, который вы сможете скачать и использовать для своих нужд. Давайте приступим.
Демо
Во-первых создадим файл с именем 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> |
<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>';
} |
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']; |
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> |
<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 |
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(); |
session_start();
session_destroy();
header('Location: login.php');
exit();
Авторизация на PHP без базы данных до безобразия проста, но в то же время полностью рабочая и если нужно запаролить какую-либо страницу на сайте, то этот способ вполне может подойти.
СКАЧАТЬ
Добавить комментарий