|
|
|
| подскажите пожалуйста
<?php
////////////////////////////////////////////////////////////
// 2005-2008 (C) Кузнецов М.В., Симдянов И.В.
// PHP. Практика создания Web-сайтов
// IT-студия SoftTime
// http://www.softtime.ru - портал по Web-программированию
// http://www.softtime.biz - коммерческие услуги
// http://www.softtime.mobi - мобильные проекты
// http://www.softtime.org - некоммерческие проекты
////////////////////////////////////////////////////////////
// Выставляем уровень обработки ошибок
// (http://www.softtime.ru/info/articlephp.php?id_article=23)
error_reporting(E_ALL & ~E_NOTICE);
// Если пользователь не авторизовался - авторизуемся
if(!isset($_SERVER['PHP_AUTH_USER']) || (!empty($_GET['logout']) && $_SERVER['PHP_AUTH_USER'] == $_GET['logout']))
{
Header("WWW-Authenticate: Basic realm=\"Control Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
else
{
// Утюжим переменные $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW'],
// чтобы мышь не проскочила
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 * FROM $tbl_accounts
WHERE name = '".$_SERVER['PHP_AUTH_USER']."'";
$lst = @mysql_query($query);
// Если ошибка в SQL-запросе - выдаём окно
if(!$lst)
{
Header("WWW-Authenticate: Basic realm=\"Control Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если такого пользователя нет - выдаём окно
if(mysql_num_rows($lst) == 0)
{
Header("WWW-Authenticate: Basic realm=\"Control Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
// Если все проверки пройдены, сравниваем хэши паролей
$account = @mysql_fetch_array($lst);
if(md5($_SERVER['PHP_AUTH_PW']) != $account['pass'])
{
Header("WWW-Authenticate: Basic realm=\"Control Page\"");
Header("HTTP/1.0 401 Unauthorized");
exit();
}
}
?>
|
на локальной машине работает нормально все, на хостинге не авторизирует! с чем это связано? | |
|
|
|
|
|
|
|
для: сотка
(28.12.2011 в 11:53)
| | причина в хостинге? | |
|
|
|
|
|
|
|
для: сотка
(28.12.2011 в 12:23)
| | вопрос открыт! подскажите | |
|
|
|
|
|
|
|
для: сотка
(28.12.2011 в 12:23)
| | >причина в хостинге?
Скорее всего, выясните, как подключен PHP к Apache: как модуль или как внешнее CGI-приложение? Для этого можно воспользоваться отчетом функции phpinfo().
PS Базовая авторизация работает только при подключении PHP в качестве модуля, и не работает при подключении в качестве внешнего CGI-приложения. | |
|
|
|
|
|
|
|
для: cheops
(28.12.2011 в 13:00)
| | каким образом можно исправить? подключен как внешнее CGI-приложение | |
|
|
|
|
|
|
|
для: сотка
(28.12.2011 в 13:19)
| | Ну это может сделать только администратор... иногда панели управления хостингом позволяют выбрать способ подключения - посмотрите/спросите тех.поддержку, возможно у вас это можно. А так придется воспользоваться традиционной Web-аутентификацией. | |
|
|
|
|
|
|
|
для: cheops
(28.12.2011 в 13:22)
| | А в чем отличие данных авторизаций?Server API CGI/FastCGI | |
|
|
|
|
|
|
|
для: сотка
(28.12.2011 в 16:37)
| | Для корректной работы базовой аутентификации необходимо:
1. в папке создать .htaccess:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
2. в файле который проводит авторизацию в начале скрипта добавить:
<?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';
}
if ( isset($_SERVER['HTTP_AUTHORIZATION']) )
{
$ha = base64_decode( substr($_SERVER['HTTP_AUTHORIZATION'], 6) );
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $ha);
$PHP_AUTH_USER = $_SERVER['PHP_AUTH_USER'];
$PHP_AUTH_PW = $_SERVER['PHP_AUTH_PW'];
}
?>
Может кому пригодиться! | |
|
|
|