Вот уже и наступила зима, поздравляю всех с ее первыми деньками, снежок, узоры от мороза на стеклах окон, в общем все как надо) Совсем недавно, мне потребовалось разработать скрипт на php для входа под одним паролем на сайт, причем под постоянным паролем, без логина и прочих элементов авторизации. Можно так сказать, сделать вход в секретный раздел не используя при этом базу данных. Решил поделиться скриптом и с Вами, авось кому пригодится...
Перед началом данного урока, замечу, что на сайте я уже выкладывал подобного рода материалы, но они настолько старые, ведь использовался там скрипт полноценной авторизации с базой данных на обычном MySQL. Продолжать рубрику я не стал по нескольким адекватным причинам: Во-первых, потому что никто уже MySQL почти, за исключением редких случаев, не использует, во-вторых, это не целесообразно возвращаться в прошлое, а в-третьих, совершенно небезопасно по синхронности кода.
Но все же, кому если захочется почитать уроки по теме разработка системы управления сайтом, не буду против) В скором будущем, думаю на эти материалы появятся релизы, например, аналог разработки на PHP фреймворках Laravel или Yii2, а может просто сделать подобного типа реализация функционала на PDO. Предлагайте свои варианты, интересно будет поразмышлять)
И так, приступаем к самому PHP коду нашего скрипта для входа на сайт, и первым делом нам обязательно потребуется условие, которое будет разбивать нашу страницу на две части: не авторизованную и авторизованную.
if($code != $prcode){ // Если пользователь не авторизованный } else{ // Если пользователь авторизованный }
Переменная $code будет хранить в себе глобальные массивы $_POST и $_SESSION. В переменной $prcode мы будем хранить наш пароль. Теперь, для не авторизованного пользователя между первым условием "если", мы поместим форму для входа на сайт.
echo'<form action="/" method="post"> <input type="text" placeholder="Введите ключ" name="code"> <button type="submit">Войти</button> </form>';
Как видим, что поле под название code, которое мы будем посылать глобальному массиву $_POST, затем получать ответ, обрабатывать его на ошибки: на пустоту, а также проверять его на совпадение с переменной нашего пароля $prcode, после этого только, будем сохранять авторизованного пользователя в сессию. Но для начала, давайте инициализируем ее.
@session_start();
Теперь пропишем наши переменные, одна из которых с нашим придуманным паролем, другая с пустым значением текста для вывода информационных сообщений, к примеру об ошибке авторизации.
$prcode = 123; $text = '';
Далее мы должны принять поле под названием code в глобальный массив $_POST и обработать. То же самое нужно проделать для глобального массива $_SESSION.
if(isset($_POST['code'])){ $code = $_POST['code']; } if(isset($_SESSION['code'])){ $code = $_SESSION['code']; }
После чего проверим скрипт на ошибки, а именно на пустоту, а также на правильность в совпадении поля под названием code с нашим паролем $prcode.
if(isset($_POST['code'])){ if(empty($_POST['code'])!=$prcode){ $text = 'Ошибка! Не правильный ключ'; } else{ $text = 'Ошибка! Введите ключ'; } }
Как вы можете заметить, что сначала я проверяю на существование глобального массива $_POST при получении поля code, если поле существует, то я создаю еще одно условие, которое проверяет на пустоту поля code, а затем сравниваю его с нашим паролем $prcode, после чего только получаю ответ.
В переменную $text записываю все допустимые ошибки и сообщения, это помогает мне понимать, как работает данный скрипт, какие ошибки он выводит, какие сообщения показывает и т.д.. Не забудьте вывести текстовый блок ошибок в конце условия.
echo $text;
Теперь, когда наша первая часть с авторизацией готова, мы вставляем в авторизованную часть пользователя, к примеру, следующий код, который имеет, кнопку выход и приветствие для входа. Чтобы сессия при обновлении страницы не слетала, не забудьте ее установить.
$text = 'Вы зашли в секретный раздел! Выйти'; $_SESSION['code'] = $code;
Ну и напоследок, нам осталось сделать только выход. Перед тем, как Вы запишите все данные в сессию, можете поставить ее на уничтожение. Подчеркиваю - только перед этим, а не после! Для примера, я решил использовать уничтожение по ссылке, через $_GET передачу, обращаясь напрямую к полю exit со значением true. Вы уж решите для себя сами, как стоит поступить. Можно, к примеру, за морочиться с формой.
if($_GET['exit']=='true'){ unset($_SESSION['code']); }
На этом у меня на сегодня все, всем спасибо за внимание!) Не забывайте подписываться на страницу в вк или на youtube канал, который после Нового Года буду стараться активно вести) Всем удачи и до скорого! Увидимся)