Глава 16. HTTP-юСРЕМРХТХЙЮЖХЪ Б PHP

HTTP-юСРЕМРХТХЙЮЖХЪ Б PHP БНГЛНФМЮ РНКЭЙН Б РНЛ ЯКСВЮЕ, ЙНЦДЮ НМ БШОНКМЪЕРЯЪ ЙЮЙ ЛНДСКЭ БЕА-ЯЕПБЕПЮ Apache, Х, ЯННРБЕРЯРБЕММН, МЕДНЯРСОМЮ ДКЪ CGI-БЕПЯХХ. бЮЬ ЯЙПХОР ЛНФЕР ХЯОНКЭГНБЮРЭ ТСМЙЖХЧ header() ДКЪ РНЦН, ВРНАШ НРОПЮБХРЭ АПЮСГЕПС ЙКХЕМРЮ ЯННАЫЕМХЕ "Authentication Required", ВРН Б ЯБНЧ НВЕПЕДЭ ОПХБЕДЕР Й ОНЪБКЕМХЧ ДХЮКНЦНБНЦН НЙМЮ ДКЪ ББНДЮ ХЛЕМХ ОНКЭГНБЮРЕКЪ Х ОЮПНКЪ. оНЯКЕ РНЦН ЙЮЙ ЙКХЕМР ББЕК ЯБНЕ ХЛЪ Х ОЮПНКЭ, ЯЙПХОР АСДЕР БШГБЮМ ОНБРНПМН, МН СФЕ Я ОПЕДНОПЕДЕКЕММШЛХ ОЕПЕЛЕММШЛХ PHP_AUTH_USER, PHP_AUTH_PW Х AUTH_TYPE, ЙНРНПШЕ ЯННРБЕРЯРБЕММН ЯНДЕПФЮР ХЛЪ ОНКЭГНБЮРЕКЪ, ОЮПНКЭ Х РХО ЮСРЕМРХТХЙЮЖХХ. щРХ ОЕПЕЛЕММШЕ ЛНЦСР АШРЭ МЮИДЕМШ Б ЛЮЯЯХБЕ $_SERVER Х $HTTP_SERVER_VARS. б МЮЯРНЪЫЕЕ БПЕЛЪ ОНДДЕПФХБЮЕРЯЪ РНКЭЙН "Basic"-ЮСРЕМРХТХЙЮЖХЪ. рЮЙФЕ БШ ЛНФЕРЕ НГМЮЙНЛХРЯЪ Я АНКЕЕ ДЕРЮКЭМШЛ НОХЯЮМХЕЛ ТСМЙЖХХ header().

гЮЛЕВЮМХЕ ЙЮЯЮРЕКЭМН БЕПЯХХ PHP: CСОЕПЦКНАЮКЭМШЕ ОЕПЕЛЕММШЕ, РЮЙХЕ ЙЮЙ $_SERVER, ДНЯРСОМШ, МЮВХМЮЪ Я 4.1.0. лЮЯЯХБ $HTTP_SERVER_VARS ДНЯРСОЕМ Б PHP 3 Х БШЬЕ.

оПХЛЕП ТПЮЦЛЕМРЮ ЯЙПХОРЮ, ЙНРНПШИ БШМСФДЮЕР ЙКХЕМРЮ ЮБРНПХГХПНБЮРЭЯЪ ДКЪ ОПНЯЛНРПЮ ЯРПЮМХЖШ:

Пример 16-1. оПХЛЕП HTTP-ЮСРЕМРХТХЙЮЖХХ

<?php
  
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo
'рЕЙЯР, НРОПЮБКЪЕЛШИ Б РНЛ ЯКСВЮЕ,
    ЕЯКХ ОНКЭГНБЮРЕКЭ МЮФЮК ЙМНОЙС Cancel'
;
    exit;
  } else {
    echo
"<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo
"<p>бШ ББЕКХ ОЮПНКЭ {$_SERVER['PHP_AUTH_PW']}.</p>";
  }
?>

гЮЛЕВЮМХЕ ЙЮЯЮРЕКЭМН ЯНБЛЕЯРХЛНЯРХ: аСДЭРЕ НЯНАЕММН БМХЛЮРЕКЭМШ ОПХ СЙЮГЮМХХ HTTP-ГЮЦНКНБЙНБ. дКЪ РНЦН, ВРНАШ ЦЮПЮМРХПНБЮРЭ ЛЮЙЯХЛЮКЭМСЧ ЯНБЛЕЯРХЛНЯРЭ Я МЮХАНКЭЬХЛ ЙНКХВЕЯРБНЛ ПЮГКХВМШУ ЙКХЕМРНБ, ЯКНБН "Basic" ДНКФМН АШРЭ МЮОХЯЮМН Я АНКЭЬНИ АСЙБШ "B", ПЕЦХНМ (realm) ДНКФЕМ АШРЭ БГЪР Б ДБНИМШИ (МЕ НДХМЮПМШЕ!) ЙЮБШВЙХ, Х ПНБМН НДХМ ОПНАЕК ДНКФЕМ ОПЕДЬЕЯРБНБЮРЭ ЙНДС 401 Б ГЮЦНКНБЙЕ HTTP/1.0 401.

бЛЕЯРН ОПНЯРНЦН НРНАПЮФЕМХЪ МЮ ЩЙПЮМЕ ОЕПЕЛЕММШУ PHP_AUTH_USER Х PHP_AUTH_PW, БЮЛ, БНГЛНФМН, ОНМЮДНАХРЯЪ ОПНБЕПХРЭ ХУ ЙНППЕЙРМНЯРЭ. хЯОНКЭГСИРЕ ДКЪ ЩРНЦН ГЮОПНЯ Й АЮГЕ ДЮММШУ ХКХ ОНХЯЙ ОНКЭГНБЮРЕКЪ Б dbm-ТЮИКЕ.

бШ ЛНФЕРЕ ОПНМЮАКЧДЮРЭ НЯНАЕММНЯРХ ПЮАНРШ АПЮСГЕПЮ Internet Explorer. нМ НВЕМЭ РПЕАНБЮРЕКЕМ Й ОЮПЮЛЕРПС ОЕПЕДЮБЮЕЛШУ ГЮЦНКНБЙНБ. сЙЮГЮМХЕ ГЮЦНКНБЙЮ WWW-Authenticate ОЕПЕД НРОПЮБЙНИ ЯРЮРСЯЮ HTTP/1.0 401 ЪБКЪЕРЯЪ МЕАНКЭЬНИ УХРПНЯРЭЧ.

мЮВХМЮЪ Я PHP 4.3.0, ДКЪ РНЦН, ВРНАШ ОПЕДНРБПЮРХРЭ МЮОХЯЮМХЕ ЙЕЛ-КХАН ЯЙПХОРЮ, ПЮЯЙПШБЮЧЫЕЦН ОЮПНКЭ Й ЯРПЮМХЖЕ, ЙНРНПЮЪ ХЯОНКЭГСЕР БМЕЬМЧЧ ЮСРЕМРХТХЙЮЖХЧ, ОЕПЕЛЕММШЕ PHP_AUTH МЕ СЯРЮМЮБКХБЮЧРЯЪ Б ЯКСВЮЕ, ЕЯКХ ДЮММЮЪ ЯРПЮМХЖЮ ХЯОНКЭГСЕР БМЕЬМЧЧ ЮСРЕМРХТХЙЮЖХЧ Х СЯРЮМНБКЕМ safe mode. мЕЯЛНРПЪ МЮ ЩРН, ОЕПЕЛЕММЮЪ REMOTE_USER ЛНФЕР ХЯОНКЭГНБЮРЭЯЪ ДКЪ ЮСРЕМРХТХЙЮЖХХ ОНКЭГНБЮРЕКЪ, ОПНЬЕДЬЕЦН БМЕЬМЧЧ ЮСРЕМРХТХЙЮЖХЧ. рЮЙХЛ НАПЮГНЛ, БШ БЯЕЦДЮ ЛНФЕРЕ БНЯОНКЭГНБЮРЭЯЪ ОЕПЕЛЕММНИ $_SERVER['REMOTE_USER'].

гЮЛЕВЮМХЕ ЙЮЯЮРЕКЭМН ЙНМТХЦСПЮЖХХ: PHP ХЯОНКЭГСЕР СЙЮГЮМХЕ ДХПЕЙРХБШ AuthType ДКЪ СЙЮГЮМХЪ РНЦН, ХЯОНКЭГСЕРЯЪ БМЕЬМЪЪ ЮСРЕМРХТХЙЮЖХЪ ХКХ МЕР.

яКЕДСЕР ГЮЛЕРХРЭ, ВРН БЯЕ БШЬЕЯЙЮГЮММНЕ МЕ ОПЕДНРБПЮЫЮЕР ОНУХЫЕМХЪ ОЮПНКЕИ Й ЯРПЮМХЖЮЛ, РПЕАСЧЫХЛ ЮБРНПХГЮЖХЧ, ЙЕЛ-КХАН, ЙРН ЙНМРПНКХПСЕР ЯРПЮМХЖШ АЕГ ЮБРНПХГЮЖХХ, ПЮЯОНКНФЕММШЕ МЮ РНЛ ФЕ ЯЕПБЕПЕ.

х Netscape Navigator Х Internet Explorer НВХЫЮЧР ЙЕЬ ЮСРЕМРХТХЙЮЖХХ РЕЙСЫЕЦН НЙМЮ ДКЪ ГЮДЮММНЦН ПЕЦХНМЮ (realm) ОПХ ОНКСВЕМХХ НР ЯЕПБЕПЮ. щРН ЛНФЕР ХЯОНКЭГНБЮРЭЯЪ ДКЪ ПЕЮКХГЮЖХХ ОПХМСДХРЕКЭМНЦН БШУНДЮ ОНКЭГНБЮРЕКЪ Х ОНБРНПМНЦН НРНАПЮФЕМХЪ ДХЮКНЦНБНЦН НЙМЮ ДКЪ ББНДЮ ХЛЕМХ ОНКЭГНБЮРЕКЪ Х ОЮПНКЪ. мЕЙНРНПШЕ ПЮГПЮАНРВХЙХ ХЯОНКЭГСЧР ЩРН ДКЪ НЦПЮМХВЕМХЪ ЮБРНПХГЮЖХХ ОН БПЕЛЕМХ ХКХ ДКЪ ОПЕДНЯРЮБКЕМХЪ ЙМНОЙХ "бШУНД".

Пример 16-2. оПХЛЕП HTTP-ЮСРЕМРХТХЙЮЖХХ Я ОПХМСДХРЕКЭМШЛ ББНДНЛ МНБНИ ОЮПШ КНЦХМ/ОЮПНКЭ

<?php
  
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Test Authentication System"');
    
header('HTTP/1.0 401 Unauthorized');
    echo
"бШ ДНКФМШ ББЕЯРХ ЙНППЕЙРМШИ КНЦХМ Х ОЮПНКЭ ДКЪ ОНКСВЕМХЪ ДНЯРСОЮ Й ПЕЯСПЯС \n";
    exit;
  }

  if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
      (
$_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
   
authenticate();
  }
  else {
   echo
"<p>дНАПН ОНФЮКНБЮРЭ: {$_SERVER['PHP_AUTH_USER']}<br />";
   echo
"оПЕДШДСЫХИ КНЦХМ: {$_REQUEST['OldAuth']}";
   echo
"<form action='{$_SERVER['PHP_SELF']}' METHOD='post'>\n";
   echo
"<input type='hidden' name='SeenBefore' value='1' />\n";
   echo
"<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}' />\n";
   echo
"<input type='submit' value='юБРНПХГНБЮРЭЯЪ ОНБРНПМН' />\n";
   echo
"</form></p>\n";
  }
?>

щРН ОНБЕДЕМХЕ МЕ ПЕЦКЮЛЕМРХПСЕРЯЪ ЯРЮМДЮПРЮЛХ HTTP Basic-ЮСРЕМРХТХЙЮЖХХ, ЯКЕДНБЮРЕКЭМН, БШ МЕ ДНКФМШ ГЮБХЯЕРЭ НР ЩРНЦН. йЮЙ ОНЙЮГЮКХ РЕЯРШ, АПЮСГЕП Lynx МЕ НВХЫЮЕР ЙЕЬ ЮБРНПХГЮЖХХ ОПХ ОНКСВЕМХХ НР ЯЕПБЕПЮ ЯРЮРСЯЮ 401, Х, МЮФЮБ ОНЯКЕДНБЮРЕКЭМН "Back", Ю ГЮРЕЛ "Forward" БНГЛНФМН НРЙПШРЭ РЮЙСЧ ЯРПЮМХЖС, ОПХ СЯКНБХХ, ВРН РПЕАСЕЛШЕ ЮРПХАСРШ ЮБРНПХЮГЮЖХХ МЕ ХГЛЕМХКХЯЭ. нДМЮЙН, ОНКЭГНБЮРЕКЭ ЛНФЕР МЮФЮРЭ ЙКЮБХЬС '_' ДКЪ НВХЯРЙХ ЙЕЬЮ ЮСРЕМРХТХЙЮЖХХ.

рЮЙФЕ ЯКЕДСЕР ГЮЛЕРХРЭ, ВРН ДН БЕПЯХХ PHP 4.3.3, HTTP-ЮСРЕМРХТХЙЮЖХЪ МЕ ПЮАНРЮКЮ МЮ ЯЕПБЕПЮУ ОНД СОПЮБКЕМХЕЛ Microsoft IIS, ЕЯКХ PHP АШК СЯРЮМНБКЕМ ЙЮЙ CGI-ЛНДСКЭ, Б ЯХКС МЕЙНРНПШУ НЦПЮМХВЕМХИ IIS. дКЪ РНЦН, ВРНАШ ДНАХРЭЯЪ ЙНППЕЙРМНИ ПЮАНРШ Б PHP 4.3.3+, БШ ДНКФМШ НРПЕДЮЙРХПНБЮРЭ ЙНМТХЦСПЮЖХНММСЧ МЮЯРПНИЙС IIS ОНД МЮГБЮМХЕЛ "Directory Security". ыЕКЙМХРЕ МЮ МЮДОХЯХ "Edit" Х СЯРЮМНБХРЕ НОЖХЧ "Anonymous Access", БЯЕ НЯРЮКЭМШЕ ОНКЪ ДНКФМШ НЯРЮРЭЯЪ МЕНРЛЕВЕММШЛХ.

еЫЕ НДМН НЦПЮМХВЕМХЕ, ЕЯКХ БШ ХЯОНКЭГСЕРЕ IIS ОНЯПЕДЯРБНЛ ISAPI: ОЕПЕЛЕММШЕ PHP_AUTH_* МЕ НОПЕДЕКЕМШ, МН Б РН ФЕ БПЕЛЪ ДНЯРСОМЮ ОЕПЕЛЕММЮЪ HTTP_AUTHORIZATION. оПХЛЕП ЙНДЮ, ЙНРНПШИ БШ ЛНЦКХ АШ ХЯОНКЭГНБЮРЭ: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

гЮЛЕВЮМХЕ ЙЮЯЮРЕКЭМН IIS:: дКЪ РНЦН, ВРНАШ HTTP-ЮСРЕМРХТХЙЮЖХЪ ЙНППЕЙРМН ПЮАНРЮКЮ Б IIS, Б ЙНМТХЦСПЮЖХХ PHP НОЖХЪ cgi.rfc2616_headers ДНКФМЮ АШРЭ СЯРЮМНБКЕМЮ ГМЮВЕМХЕЛ 0 (ГМЮВЕМХЕ ОН СЛНКВЮМХЧ).

Замечание: б ЯКСВЮЕ, ЕЯКХ ХЯОНКЭГСЕРЯЪ ГЮЫХЫЕММШИ ПЕФХЛ, UID РЕЙСЫЕЦН ЯЙПХОРЮ АСДЕР ДНАЮБКЕМ Б realm-ВЮЯРЭ ГЮЦНКНБЙЮ WWW-Authenticate.


HIVE: All information for read only. Please respect copyright!
Hosted by hive йца: йХЕБЯЙЮЪ ЦНПНДЯЙЮЪ АХАКХНРЕЙЮ