Pheodor Lab

Блог веб-разработчика

Простая авторизация на PHP с помощью HTTP

Pheodor в PHP

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

Будем использовать функцию header() для отправки браузеру требований авторизироваться, тем самым заставим его показать свою встроенную форму авторизации с полями для ввода логина и пароля.

В Хроме это будет выглядеть вот так:
HTTP авторизация в хроме 

Код 

Готовая функция для авторизации:

function check_access($login, $pass) {
        if(!isset($_SERVER['PHP_AUTH_USER'])) {
            header('WWW-Authenticate: Basic realm="Auth required"');
            header('HTTP/1.0 401 Unauthorized');
            echo 'Auth required!';
            exit;
        } 
        elseif($_SERVER['PHP_AUTH_USER'] == $login && $_SERVER['PHP_AUTH_PW'] == $pass) {
            return true;
        }
        else {
            echo "Access denied.";
            exit;
        }
}


echo check_access("admin", 'password') ? "Привет!" : "Некорректный логин или пароль :(";

Разберем код

Предупреждаем браузер, что ничего ему не покажем без логина и пароля: 

if(!isset($_SERVER['PHP_AUTH_USER'])) {
            # Говорим браузеру, что требуется авторизация
            header('WWW-Authenticate: Basic realm="Auth required"');
            header('HTTP/1.0 401 Unauthorized');
            echo 'Auth required!';
            exit;
} 

Если форма была отправлена - сравниваем логин и пароль:

elseif($_SERVER['PHP_AUTH_USER'] == $login && $_SERVER['PHP_AUTH_PW'] == $pass) {
            return true;
}

Если логин или пароль не совпали - говорим об этом:

else {
            echo "Access denied.";
            exit;
}

В целом все просто. 

1 комментарий
Макс
27.10.2016 23:34
Спасибо! Пригодилось.

Ответить
Написать комментарий