Возможность входа в защищенную зону сохраняется в течение всего сеанса работы окна браузера, но после того, как вы его закроете, войти снова можно будет лишь набрав имя пользователя и пароль. То есть, воспользовавшись вашим компьютером, незаконных действий от вашего имени совершить невозможно. Чем еще хорош этот метод? Он не принимает никаких переменных со сторонних серверов и после трехкратного неверного ввода пароля вам придется обновлять страницу, что затрудняет взлом системы подбором.
А выглядит это вот так:
<?php
if(!isset($PHP_AUTH_USER))
// пользователь неизвестен
{
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else
// пользователь известен, неизвестен пароль
{
// введенный пароль
$password = "$PHP_AUTH_PW";
// просмотр базы для получения реального пароля
$link = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname);
$result=mysql_query("SELECT password FROM auth WHERE name=\"$PHP_AUTH_USER\"");
$row=mysql_fetch_array($result);
// проверка
if ($row==NULL)// пользователя с таким именем нет в БД, выходим
{
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else// пользователь с таким именем есть в БД, проверка пароля
{
$real_password="$row[password]";
if ($real_password!=$password)
{
Header("WWW-Authenticate: Basic realm=\"Admin Center\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
}
}
?>
// далее следует код самой страницы
Введенный пользователем логин хранится в переменной $PHP_AUTH_USER, пароль - в $PHP_AUTH_PW. Кстати, обратите внимание на проверку существования записи пользователя с таким именем в БД - это критический момент, который учитывать весьма важно. В случае, если такой проверки не будет, это приведет к плачевным результатам - $row[password] будет равно нулю, то есть введя несуществующее имя пользователя и пустой пароль можно будет попасть в защищенную зону.
Между инструкциями Header("HTTP/1.0 401 Unauthorized"); и exit(); вставляем что угодно - от простой фразы о том, что сюда нельзя до предложения куда-нибудь сходить, слетать, сбегать, сползать и так далее. Да, чуть не забыл - в переменных $dbhost, $dbuser, $dbpasswd и $dbname хранятся данные, обеспечивающие доступ к базе и имя базы.
Подобный код необходимо вставить на каждую страницу защищенной зоны, например, через include.
Вот вы и защищены. От себя могу еще добавить, что паролирование таким способом лично мне кажется весьма удобным и надежным.