aletych
13.08.2009 - 15:14
Вот скрипт защиты файла паролем. Вводиш логин и пароль - опять тоже самое окно запроса. Вроди переменной $_SERVER['PHP_AUTH_USER'] вообще нету. Подскажите почему? на домашнем сервере всё работает, а на сервере провайдера нет. Может с настройками рнр что-то?
PHP |
<?php include("blocks/bd.php"); if (!isset($_SERVER['PHP_AUTH_USER']))
{ Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); Header ("HTTP/1.0 401 Unauthorized"); exit(); }
else { if (!get_magic_quotes_gpc()) { $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']); $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']); }
$query = "SELECT pass FROM userlist WHERE user='".$_SERVER['PHP_AUTH_USER']."'"; $lst = @mysql_query($query);
if (!$lst) { Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); Header ("HTTP/1.0 401 Unauthorized"); exit(); }
if (mysql_num_rows($lst) == 0) { Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); Header ("HTTP/1.0 401 Unauthorized"); exit(); }
$pass = @mysql_fetch_array($lst); if ($_SERVER['PHP_AUTH_PW']!= $pass['pass']) { Header ("WWW-Authenticate: Basic realm=\"Admin Page\""); Header ("HTTP/1.0 401 Unauthorized"); exit(); } } |
Спустя 1 час, 10 минут, 21 секунда (13.08.2009 - 15:25) Kuliev написал(а):
Скорей всего символы чувствительны к регистру, и может быть что вы после логина ставите пробел и набираете пароль!
Спустя 2 часа, 6 минут, 28 секунд (13.08.2009 - 17:31) kirik написал(а):
Basic авторизация не
работает, если
php стоит как cgi. Совсем недавно наткнулся на эту неприятность.. Сделал такую замену:
PHP |
function passwordProtect($username, $password) { if(empty($_SESSION['admin'])) { if(isset($_POST['name'], $_POST['pass']) && $_POST['name'] == $username && $_POST['pass'] == $password) { $_SESSION['admin'] = true; return true; }
echo '<form method="post"><input type="text" name="name" /><br /><input type="password" name="pass" /><br /><input type="submit" value="Enter" /></form>'; return false; } else { return true; }
// if(isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_USER'] == $username && $_SERVER['PHP_AUTH_PW'] == $password) // { // return true; // } // else // { // header('WWW-Authenticate: Basic realm="Login"', true); // header('HTTP/1.0 401 Unauthorized', true); // return false; // } }
if(passwordProtect('mylogin', 'mypassword')) header('Location: /index.php'); else exit('Даешь пароль!'); |
Спустя 7 минут, 56 секунд (13.08.2009 - 17:39) twin написал(а):
Цитата |
Basic авторизация не работает, если php стоит как cgi. |
Странно...
Вот как cgi стоит...
Спустя 15 минут, 31 секунда (13.08.2009 - 17:55) kirik написал(а):
Цитата (twin @ 13.08.2009 - 09:39) |
Странно... Вот как cgi стоит... |
Вот ерунда.. у меня неделю назад отказывалась работать, а сейчас тоже работает.. Даже в мане пишут:
Цитата (http://us3.php.net/manual/en/features.http-auth.php) |
The HTTP Authentication hooks in PHP are only available when it is running as an Apache module and is hence not available in the CGI version. |
Цитата (http://www.php.ru/manual/features.http-auth.html) |
HTTP-Аутентификация в PHP возможна только в том случае, когда он выполняется как модуль веб-сервера Apache, и, соответственно, недоступна для CGI-версии. |
...