Аутентификация пользователя
Правильно введенные имя и пароль открывают пользователю доступ к каталогам сервера. Этот принцип аутентификации обычно называется схемой «запрос/ответ». Запросом является приглашение к вводу имени и пароля, а ответом - введенные данные. Если введенная комбинация верна, пользователю предоставляется доступ к защищенным каталогам.
Как правило, для ввода имени и пароля применяются диалоговые окна, активизируемые вызовом функции header( ).
Следующим шагом после подготовки интерфейса для ввода является обработка имени пользователя и пароля. В РНР имя и пароль хранятся в двух глобальных переменных, $PHP_AUTH_USER (имя) и $PHP_AUTH_PW (пароль). В простейшей, но недостаточно гибкой схеме ограничения доступа к странице имя пользователя и пароль жестко кодируются в сценарии:
if ((!isset ($PHP_AUTH_USER)) || (!isset ($PHP_AUTH_PW)) ||
($PHP_AUTH_USER != 'login') || ($PHP_AUTH_PW != 'parol'))
{ header( 'WWW-Authenticate: Basic realm="Secret Family Recipes"');
header ('HTTP/1.0 401 Unauthorized'); print "Неверно указан логин и/или пароль!";
exit;
}
Пример, чтение аутентификационных данных из текстового файла (authenticate.txt). В каждой строке файла содержится отдельная пара «имя:пароль»; в процессе проверки программа последовательно читает и проверяет все строки файла:
$file = "authenticate.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))
{ $authorized = 1; break; }
}
if (! $authorized)
{ header('WWW-Authenticate: Basic realm="Secret Family Recipes'");
header('HTTP/1.0 401 Unauthorized'); print "Неверный логин и/или пароль"; exit;
}
else print "Приветствую Вас!";
Пример программы аутентификации пользователя c аутентификацион-ными данными в демонстрационной таблицей (user_authenticate) в базе данных (useMnfo) с полями: userid, username, password.
if (!isset($PHP_AUTH_USER))
{ header( 'WWW-Authenticate: Basic realm="Secret Family Recipes'");
header('HTTP/1.0 401 Unauthorized'); exit;
}
else
{ mysql_connect ("host", "user", "password")
or exit ("Ошибка при подключении!"); // Создать содинение с базой данных MySQL
mysql_select_db ("useMnfo")or exit ("Ошибка при открытии базы данных!");
// Обратиться к таблице user_authenticate для поиска совпадающей строки
$query = "select userid from user_authenticate whereusername = '$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 $userid = mysql_result (user_authenticate, 0, $result);
}
2.15. Рекомендации
Дата добавления: 2015-04-15; просмотров: 973;