PHP авторизация на сайте — чтобы пользователи не мерзли у входа

Duminică, 23 Octombrie 2016 12:22

От автора: современные устройства не только помогают в жизни, но еще и затрудняют ее. Мой сосед три часа простоял возле собственного подъезда. И все потому, что забыл дома ключи, а приехавшая в гости теща не узнала голос собственного зятя по домофону. Или не хотела «признать» :) . Сегодня мы разберемся, что такое PHP авторизация на сайте и как ее правильно организовать, чтобы ваши пользователи «не мерзли» у входа.

Стандартная авторизация

Авторизация на сайте является необходимой функцией. С ее помощью владелец ресурса может попасть в административную панель и скорректировать работу систему, а контентщик – опубликовать новый материал.

Кроме этого на многих сайтах пользователям предоставляют доступ к дополнительному функционалу, которым не могут воспользоваться обычные посетители (комментирование, размещение фотографий, специализированные инструменты). Для авторизации человек должен быть зарегистрирован в системе ресурса.

В современном интернете стандартной считается модуль авторизации на сайте, построенный на PHP и MySQL. Вся информация о пользователе, полученная во время регистрации, записывается в специальную таблицу БД MySQL. Набор сохраняемых значений на каждом сайте может варьироваться, но обязательными являются логин и пароль пользователя.

Человеку, зашедшему на любимый ресурс, нужно сообщить его системе о том, что он является зарегистрированным (постоянным) пользователем ресурса. Для этого в специальную форму посетитель вводит свой логин и пароль. Затем их значение с помощью скрипта авторизации на PHP и MySQL сравнивается с данными, сохраненными в СУБД. Если они совпадают, то пользователь получает доступ к расширенному функционалу ресурса.

Здесь еще можно упомянуть о системе ролей, реализованных во многих популярных движках. В них каждой учетной записи предоставляется доступ к определенному набору инструментов. Более подробно этот процесс описан в материалах, посвященных CMS.

Мы это проходили

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

Начнем, как всегда, с формы. Вот ее разметка:

1.<form method="post">
2.<input type="text" name="l" placeholder="Enter your login"style="color: rgb(51,255,51)"/><br/>
3.<br/>
4.<input type="password" name="p" placeholder="Enter your password"style="color: rgb(51,255,51)"/><br/>
5.<br/>
6.<input type="submit" value="Enter" />
7.</form>
 

Обработчик с элементами ООП и бес СУБД

Вы не ослышались: сегодняшний скрипт авторизации на PHP будет без СУБД. Точнее, это сделано намеренно, чтобы акцентировать внимание на сессиях. А для обработчика мы создадим отдельный класс и наполним его специализированными функциями.

Все переменные сессии доступны через одноименный глобальный массив PHP$_SESSION. Для начала запускаем сессию и устанавливаем «правильную» кодировку:

1.header('Content-Type: text/html; charset=utf-8');
2.session_start();
 

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

1.class Authoris_sess {
2.private $_lg "user";
3.private $_pass "php";
 

Обратите внимание, что в PHP скрипте авторизации на сайте большая часть значений переменных берется из массива $_SESSION.

Функция maybe() проверяет, была ли начата сессия и авторизирован ли пользователь в системе ресурса.

2.if (isset($_SESSION["authoris"])) {
3.return $_SESSION["authoris"];
4.}
5.else return false;
6.}
 

С помощью auth() проводим авторизацию. Проверяем правильность введенного пароля и логина.

01.public function auth($lg$pass) {
02.if ($lg == $this->_lg && $pass == $this->_pass) {
03.$_SESSION["authoris"] = true;
04.$_SESSION["l"] = $lg;
05.return true;
06.}
07.else {
08.$_SESSION["authoris"] = false;
09.return false;
10.}
11.}
 

Функция give_login() возвращает пользовательский логин, записанный в сессии. С помощью vihod() – закрываем сессию:

01.public function give_login() {
02.if ($this->maybe()) {
03.return $_SESSION["l"];
04.}
05.}
06.public function vihod() {
07.$_SESSION array();
08.session_destroy();
09.}
 

Доделаем авторизацию на сайте PHP. В конце файла обработчика создаем экземпляр класса Authoris_sess и добавляем несколько проверок: валидность пароля и логина, а также нажатие на кнопку выхода (окончания сеанса).

01.$auth new Authoris_sess();
02.if (isset($_POST["l"]) && isset($_POST["p"])) {
03.if (!$auth->auth($_POST["l"], $_POST["p"])) {
04.echo "<p style=\"color:red;\">Неправильный пароль или логин!</p>";
05.}
06.}
07.if (isset($_GET["exit"])) {
08.if ($_GET["exit"] == 1) {
09.$auth->vihod();
10.header("Location: ?exit=0");
11.}
12.}
 

Доводим до ума форму

В файл формы вначале «прикрепляем» обработчик. Затем проверяем, авторизирован пользователь или нет. Если да, то выводим для него кнопку окончания сессии. Если нет, то показываем форму:

01.<?php
02.require("handler.php");
03.if ($auth->maybe()) {
04.echo "Hello, " $auth->give_login() ;
05.echo "<br/><br/><a href=\"?exit=1\">Exit</a>";
06.}
07.else {
08.?>
09.//Здесь код формы
10.} ?>
 

Оба файла проекта можно скачать по этой ссылке. Сегодняшний материал получился интересным и без модуля PHP авторизации на другом сайте. Для сохранения и записи значений мы использовали переменные сессии. Затем их значения сохраняются на стороне сервера и «всплывают» при следующем визите. С их помощью можно повысить степень индивидуализации функционала для каждого пользователя.

Источник: http://webformyself.com/php-avtorizaciya-na-sajte-chtoby-polzovateli-ne-merzli-u-vxoda/