Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает базовая авторизация на хостинге
 
 автор: сотка   (28.12.2011 в 11:53)   письмо автору
 
 

подскажите пожалуйста
<?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 в 12:23)   письмо автору
 
   для: сотка   (28.12.2011 в 11:53)
 

причина в хостинге?

  Ответить  
 
 автор: сотка   (28.12.2011 в 12:50)   письмо автору
 
   для: сотка   (28.12.2011 в 12:23)
 

вопрос открыт! подскажите

  Ответить  
 
 автор: cheops   (28.12.2011 в 13:00)   письмо автору
 
   для: сотка   (28.12.2011 в 12:23)
 

>причина в хостинге?
Скорее всего, выясните, как подключен PHP к Apache: как модуль или как внешнее CGI-приложение? Для этого можно воспользоваться отчетом функции phpinfo().

PS Базовая авторизация работает только при подключении PHP в качестве модуля, и не работает при подключении в качестве внешнего CGI-приложения.

  Ответить  
 
 автор: сотка   (28.12.2011 в 13:19)   письмо автору
 
   для: cheops   (28.12.2011 в 13:00)
 

каким образом можно исправить? подключен как внешнее CGI-приложение

  Ответить  
 
 автор: cheops   (28.12.2011 в 13:22)   письмо автору
 
   для: сотка   (28.12.2011 в 13:19)
 

Ну это может сделать только администратор... иногда панели управления хостингом позволяют выбрать способ подключения - посмотрите/спросите тех.поддержку, возможно у вас это можно. А так придется воспользоваться традиционной Web-аутентификацией.

  Ответить  
 
 автор: сотка   (28.12.2011 в 16:37)   письмо автору
 
   для: cheops   (28.12.2011 в 13:22)
 

А в чем отличие данных авторизаций?Server API CGI/FastCGI

  Ответить  
 
 автор: сотка   (28.12.2011 в 17:36)   письмо автору
 
   для: сотка   (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'];
}
?>
Может кому пригодиться!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования