Аутонтификация
{
header('WWW-Authenticate: Basic realm="Gufys SERVER"');
header('HTTP/1.0 401 Unauthorized');
} elseif ($PHP_AUTH_USER=='gufy')
{
print("it works!!!");
}
но это не работает. пробовал заменять на $SERVER['PHP_AUTH_USER'] - тот же эффект.
как ЭТО вообще положено делать?
вот мой код аутентификации
{
header('WWW-Authenticate: Basic realm="Gufys SERVER"');
header('HTTP/1.0 401 Unauthorized');
} elseif ($PHP_AUTH_USER=='gufy')
{
print("it works!!!");
}
но это не работает. пробовал заменять на $SERVER['PHP_AUTH_USER'] - тот же эффект.
как ЭТО вообще положено делать?
вот мой код аутентификации
{
header('WWW-Authenticate: Basic realm="Gufys SERVER"');
header('HTTP/1.0 401 Unauthorized');
} elseif ($PHP_AUTH_USER=='gufy')
{
print("it works!!!");
}
но это не работает. пробовал заменять на $SERVER['PHP_AUTH_USER'] - тот же эффект.
как ЭТО вообще положено делать?
Вообще-то $_SERVER["PHP_AUTH_USER"] - Чувствуешь разницу?:) Но не в этом дело.. у тебя вообще код неправильный.
Попробуй так:
{
header("WWW-Authenticate: Basic realm=\"Secure\"");
header("HTTP/1.0 401 Unauthorized");
}
Потом..
Ну и т.д. С проблемой авторизация я разобрался.. в мануале по этому поводу все толково написано. А вот с logout'ом все никак не могу.. может кто подскажет как сделать logout из Basic авторизации без использования сессий и печенек?
{
header("WWW-Authenticate: Basic realm=localhost");
header("HTTP/1.0 401 Unauthorized");
} else
{
die("it sucks");
}
Оно 3 раза после введения правильного login'а снова выдает табличку, а затем просто грузит страницу.
В чем моя ошибка?
{
header("WWW-Authenticate: Basic realm=\"localhost\"");
header("HTTP/1.0 401 Unauthorized");
#если нажата Отмена умереть
exit;
}
if(!isset($_SERVER["PHP_AUTH_USER"]) || !isset($_SERVER["PHP_AUTH_PW"])) auth();
elseif($_SERVER["PHP_AUTH_USER"]==$user && $_SERVER["PHP_AUTH_PW"]==$pass)
{
#Успешно залогинился
}
else
{
#Неверные логин или пароль
auth();
}
Ты вообще-то не обижайся, я твой код не взял, потому что он у меня не работал...
Как не работает у меня и этот...
Смотри, я взял все как есть.
Оно ведет себя так, как если бы не получало значений. Может, есть какие-нибудь специфические настройки сервера, которых на моем Apache нет? или php.ini?
#define
Оно ведет себя так, как если бы не получало значений. Может, есть какие-нибудь специфические настройки сервера, которых на моем Apache нет? или php.ini?
Специфических настроек сервера, которые могли бы влиять на поведение данного куска кода, нет. Не понимаю почему у тебя не работает..
До посылки хидеров ничего в браузер не выводишь? Переменные $user и $pass определил до использования?
include("lib_change.inc");
$user="gufy";
$pass="gufy";
if(!isset($_SERVER["PHP_AUTH_USER"]) || !isset($_SERVER["PHP_AUTH_PW"]))
{
auth();
} elseif($_SERVER["PHP_AUTH_USER"]==$user && $_SERVER["PHP_AUTH_PW"]==$pass)
{
}
else
{
auth();
}
?>
вот auth()
{
header("WWW-Authenticate: Basic realm=\"localhost\"");
header("HTTP/1.0 401 Unauthorized");
exit;
}
кстати, что такое BASICrealm? это просто надпись или на что-=то влияет?
а работает она так.
после трех раз ввода логина и пароля показывает пустую страницу, но с нужным адресом.
Иными словами, делает то что должен делать cancel
а при попытке вывода $_SERVER['PHP_AUTH_PW'] возвращает пустую строку...
А realm указывает как назвать авторизированное место - т.е. может быть несколько страниц авторизации с разными рилмами.
Функция auth() должна описываться до ее использования.
Не понимаю почему у тебя 3 раза запрашивает и в итоге не авторизует. Попробуй в новом документе, без всяких lib_change.inc и проч.
"Вот мой код перед <html>" - не понял? Вообще-то надо что-то типа следующего сделать:
1. Засунь страницу, которая будет показываться при успешной авторизации, в отдельный файл - к примеру, "keep.out".
2. Модернизируй код:
if(!isset($_SERVER["PHP_AUTH_USER"]) || !isset($_SERVER["PHP_AUTH_PW"])) auth();
elseif($_SERVER["PHP_AUTH_USER"]==$user && $_SERVER["PHP_AUTH_PW"]==$pass)
{
include("keep.out");
}
else
...
В таком случае твоя страница будет "включена" в документ в случае успешной авторизации.
Но все же я не пойму почему у тебя пасс с логином не принимает.. у тебя код выходит на exit - это не только cancel, это еще если 3 раза неправильно введены данные авторизации.
Если можно, выложите скрипт авторизации, работающий на вашем сервере - вдруг все-таки не в программе дело?
Сервер Apache? Версия? Может он так настроен что не понимает ассоциативного массива $_SERVER - на сколько я знаю - такая фишка далеко не во всех версиях была.
remote_user мне кажется никуда неподоткнешь.. тем более если учитывать тот факт, что у большинства посетителей он как надо не определяется.
Всякие там фишки по поводу его работы я не знаю, но запускаю каждый раз вручную.
Если не $_SERVER[], то что? register_globals менять не хотелось бы...
Стоит Apache 1.3.26(Win32)
Всякие там фишки по поводу его работы я не знаю, но запускаю каждый раз вручную.
Если не $_SERVER[], то что? register_globals менять не хотелось бы...
register globals не при чем.
А версия PHP?
PHP Version Note:
Autoglobals, such as $_SERVER, became available in PHP version » 4.1.0. $HTTP_SERVER_VARS has been available since PHP 3.
Если у тебя PHP не "» 4.1.0", то попробуй использоваться $HTTP_SERVER_VARS['PHP_AUTH_USER'] и PW.
эту хреннатень вставляешь в файл который нужно запаролить, а вот этот просто кладешь в auth.php:
$LOGIN = "admin";
$PASSWORD = "pass";
function error ($error_message) {
echo $error_message."
";
exit;
}
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == $LOGIN) && ( $PHP_AUTH_PW == "$PASSWORD" )) ) {
header("WWW-Authenticate: Basic entrer=\invisible place\"");
header("HTTP/1.0 401 Unauthorized");
error("Â ÏÐÎËÅÒÅ =) ");
}
?>
вот и все пироги....а вот как папки паролить это я хотел у вас спросить...
U menja vopros k gufy. Ty razobralsja kakije nastroiki pomenjat' nado? Esli da podelis' opytom.
черт, как только не пробовал - ну, не получается. переменные $_SERVER['PHP_AUTH_USER'] и PW не запролняются, хоть убейся. Может, у меня в сервере все-таки проблема. Кстати, как можно использовать remote_user?
Если можно, выложите скрипт авторизации, работающий на вашем сервере - вдруг все-таки не в программе дело?
U menja tochno takaja zhe problema kak i u gufy. Problema tochno v servere. U menja na odnom i tom zhe servere est' mnogo virtualnyh hostov. V nekotoryh etot skript rabotajet a v nekotoryh net. $_SERVER['PHP_AUTH_USER'] ostajetsja pustoj.
U menja vopros k gufy. Ty razobralsja kakije nastroiki pomenjat' nado? Esli da podelis' opytom.
ответ прост просто в файле php.ini надо поставить register_globals=On
Все работает пользуйтесь
ответ прост просто в файле php.ini надо поставить register_globals=On
Все работает пользуйтесь
Можно поставить <? phpinfo(); ?> и посмотреть где ваш логин-пароль лежит.
php-manual:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "
Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "
You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
привет
{
header('WWW-Authenticate: Basic realm="Произвольное наименование"');
header('HTTP/1.0 401 Unauthorized');
echo "Error!\n";
exit;
}
if (!isset($_SERVER[PHP_AUTH_USER]) || (preg_match("/quit/", dirname($_SERVER['PHP_SELF'])) && $_GET[old] == $_SERVER[PHP_AUTH_USER]))
{
authenticate();
}
При этом работает logout. Только в форме надо устанавливать переменную $old в текущий логин