Допустим, есть html-страница, на которой одно единственное поле для ввода пароля. При успешном вводе пароля человека перекидывает на нужную страницу. Пароль хранится не в базе, а в каком либо файле, или в коде этой же страницы.
<form id="auth">
<input type="password" id="pass" autofocus /><br/>
<div id="err" style="display: none; color: red;">Неправильный пароль</div>
<button>Войти</button>
</form>
<script>
auth.addEventListener('submit', function (evt){
evt.preventDefault(); // отменяем действие по умолчанию
var xhr = new XMLHttpRequest;
xhr.open('POST', '/ctrl.php', false); // отправляем синхронный запрос на сервер
xhr.send('pass='+pass.value);
if( xhr.responseText == 'invalid' ){ // проверяем ответ
err.style.display = ''; // выводим ошибку
} else {
location.href = xhr.responseText; // переходим на страницу
}
});
</script>
ctrl.php:
<?php
$pass = isset($_POST['pass']) ? trim($_POST['pass']) : '';
if($pass == $secret){
echo "/secret-page.html";
} else {
echo "invalid";
}
?>
Самый лучший способ изменить расширение Вашего файла с .html на .php Так Вы по крайней мере сделаете код, который представлен снизу, компилируемым сервером. Это означает, что он не будет доступен другим пользователем. Они получат только конечный результат.
Инструкция:
P.S. Это слабая защита, для больших проектов стоит найти другое решение.
$valid_passwords = array ("login" => "pass");
$valid_users = array_keys($valid_passwords);
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if (!$validated) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
die ("Not authorized");
}
echo "<p>Здравствуйте $user.</p>";
echo "<p> Поздравляем, Вы успешно прошли авторизацию.</p>";