Apache na Win95 a Http autentifikace

Vladimír Beneš Vladimir.Benes na pvt.cz
Pondělí Září 25 09:38:35 CEST 2000


Dobrý den,

-----Původní zpráva-----
Od: charlie76 <charlie76 na atlas.cz>
Komu: Vladimír Beneą <linux na linux.cz>
Datum: 22. září 2000 16:16
Předmět: Re[2]: Apache na Win95 a Http autentifikace


>>>
>>>na win95 mam nainstalovane
>>> apache_1_3_12_win32.exe
>>> php-3.0.16-win32.zip
>>> a
>>> mysql-3.23.24-beta-win.zip
>>>
>>>Pokud v php3 scriptu poslu tuto hlavicku:
>>>
>>>************************************************************
>>> Header("HTTP/1.0 401 Unauthorized");
>>> Header("WWW-Authenticate: Basic realm=\"Jmeno\"");
>>>************************************************************
>
>
>VB> místo instrukce
>
>VB> Header("HTTP/1.0 401 Unauthorized");
>
>VB> zkuste toto:
>
>VB>   if (Ereg("Microsoft", $SERVER_SOFTWARE)):
>VB>      Header("Status: 401 Unauthorized");
>VB>   else:
>VB>      Header("HTTP/1.0 401 Unauthorized");
>VB>   endif;
>
>VB> ...a mělo by to chodit jak v M$ tak i na normálních OS.
>
>Pokud to nahradim timto nezmeni se bohuzel vubec nic.
>
>Pokud mu dam jenom toto: Header("Status: 401 Unauthorized");
>
>Sice uz nehlasi chybu a dokonce se objevi okno, ktere chce prihlaseni,
>ale bohuzel se nejde prihlasit.


Správně - tak se to má chovat. Zřejmě ale nemáte ošetřené vlastní
přihlášení.

>
>Script bezi po win95, pokud jsou scripty ulozeny na linuxu a nebo
>nekde na fyzickym serveru, ale ne kdyz mam instalovan server na
>lokalnim pocitaci:(
>
>Nezkusil by jeste nekdo neco?
>
>Bezradny Mira



Bez problémů používáme zhruba tento kód:

<code>

if ($PHP_AUTH_USER == "" && $PHP_AUTH_PW == "" && Ereg("^Basic
",$HTTP_AUTHORIZATION)) {
  List($PHP_AUTH_USER, $PHP_AUTH_PW) =
Explode(":",Base64_Decode(Substr($HTTP_AUTHORIZATION, 6)));
}
$Authenticated = false;

if ($PHP_AUTH_USER != "" || $PHP_AUTH_PW != "") {
// zde si umistete vlastni autorizaci.
// pokud je kombinace $PHP_AUTH_USER a $PHP_AUTH_PW spravna,
// nastavte $Authenticated na true;
}

if(!$Authenticated) {
  Header("WWW-Authenticate: Basic realm=\"xxxxxxxxx\"");
  if (Ereg("Microsoft", $SERVER_SOFTWARE)):
    Header("Status: 401 Unauthorized");
  else:
    Header("HTTP/1.0 401 Unauthorized");
  endif;
  // tady muzete mit html kod o chybne kombinaci jmeno / heslo
  exit();
}

</code>

    Místo komentářů uprostřed můžete vyzkoušet naprosto triviální
autorizaci:
if ($PHP_AUTH_USER='pokus' && $PHP_AUTH_PW = 'heslo') $Authenticated = true;

...a až to rozchodíte, můžete autorizaci převést na čtení dat ze souboru, z
databáze, heslo tam můžete mít cryptované atd.

        S pozdravem V. Beneš

P.S.: nepatří tento dotaz spíše třeba do konference php_prog na pandora.cz ?



Další informace o konferenci Linux