PHP 4 на практике

       

Аутентификация с несколькими пользователями


Хотя вариант, приведенный в листинге 16.4, неплохо подходит для небольших статических групп пользователей, для ограничения доступа к некоторым областям web-сайта обычно выбираются более гибкие и надежные решения. Вероятно, вы предпочтете создать отдельные имя и пароль для каждого пользователя, которому предоставляется расширенный доступ. Существует несколько реализаций этой схемы, из которых чаще всего встречается чтение аутентификационных данных из текстового файла или базы данных.

Хранение информации в текстовом файле

Существует очень простое, но эффективное решение — хранить аутентификацион-ные данные в текстовом файле. В каждой строке файла содержится отдельная пара «имя:пароль»; в,процессе проверки программа последовательно читает и проверяет все строки файла. Примерный вид текстового файла приведен в листинге 16.5.

Листинг 16.5.

Типичный текстовый файл с параметрами аутентификации (authenticate.txt)

brian:snaidni00

alessia:aiggaips

gary:9avaj9

chris:poghsawcd

matt:tsoptaes

Как видно из листинга, каждая строка приведенного файла состоит из имени пользователя и пароля, разделенных двоеточием (:). Таким образом, при использовании этого файла существует пять комбинаций «имя/пароль», обеспечивающих доступ к ограниченным ресурсам. Каждый раз, когда пользователь вводит имя и пароль в окне, сценарий открывает текстовый файл и последовательно ищет в нем совпадающую пару. Если совпадение находится, запрашиваемый доступ пользователю предоставляется, а если нет — запрос отклоняется. Процедура аутентификации продемонстрирована в листинге 16.6.

Листинг 16.6.

Аутентификация на основе текстового файла <?

<?

$file = "Listing16-5.txt":



$fp = fopen($file, "r"):

$auth_file = fread ($fp, filesize($fp)):

fclose($fp);

$authorized = 0;

// Сохранить строки файла в виде элементов массива

$elements = explode ("\n", $auth_file);

foreach ($elements as $element) {

list ($user, $pw) = split (":", $element);

if (($user == $PHP_AUTH_U$ER) && ($pw = $PHP_AUTH_PW)) :


Листинг 16.7.

Аутентификация пользователя посредством поиска в базе данных

<?

if (!isset($PHP_AUTH_USER)) :

header( 'WWW-Authenticate: Basic realm="Secret Family Recipes'");

header('HTTP/1.0 401 Unauthorized');

exit;

else :

// Создать содинение с базой данных MySQL

mysql_connect ("host", "user", "password")

or die ("Can't connect to database!");

mysql_select_db ("useMnfo")

or die ("Can't select database!");

// Обратиться к таблице user_authenticate

// для поиска совпадающей строки

$query = "select userid from user_authenticate where

username = '$PHP_AUTH_USER' and

password = '$PHP_AUTH_PW'";

$result = mysql_query (Squery):

// Если совпадение не найдено, вывести окно аутентификации

if (mysql_numrows($result) != 1) :

header('WWW-Authenticate: Basic realm="Secret Family Recipes'");

header ('HTTP/ 1.0 401 Unauthorized');

exit;

// Если проверка пройдена, получить идентификатор пользователя

else ;

Suserid = mysql_result (user_authenticate, 0, $result);

endif;

endif;

?>


Содержание раздела