$_SERVER['PHP_AUTH_*'] nicht gesetzt?

stanleyB

Erfahrenes Mitglied
Hallo,

Ich probiere mich gerade mit ersten Gehversuchen im Umgang mit dem 'WWW-Authenticate'-Header in PHP. Schien kein ernsthaftes Problem zu werden, aber stehe jetzt ratlos da und bin etwas verunsichert.
Zur Veranschaulichung vielleicht das Snippet:
PHP:
<?php
// $user['Username'] = "Passwort";
$user['kuh'] = "milch";
$user['huhn'] = "ei";

// Name des Bereiches
$area = "Bauernhof";

if(!array_key_exists($_SERVER['PHP_AUTH_USER'], $user)
   || $_SERVER['PHP_AUTH_PW'] != $user[$_SERVER['PHP_AUTH_USER']]) { 
   Header("HTTP/1.1 401 Unauthorized"); 
   Header("WWW-Authenticate: Basic realm=".$area); 
   echo "Kein Zutritt";
   exit;
}
?>
<b>Login erfolgreich</b><br />
Dieser Bereich ist nur nach dem erfolgreichen Login sichtbar.
Wer den ganzen Spass mal ausprobieren moechte, findet das Snippet auf nem Gentoo-Server mit folgender php.ini. Das Ganze funktioniert auch tadellos; wenn man allerdings das exakt gleiche Script 1:1 auf einen httpd (Windows XP) mit folgender php.ini (win) portiert, dann streikt irgendwas. Ich nehme an, es wird das PHP-Environment sein oder dergleichen. Immer wieder werde ich mit einem 'HTTP/1.1 401 Unauthorized' quittiert, obwohl ich user/pass richtig vergebe. Bitte um Rat. ;-)

// edit: Es liegt definitiv nicht am Browser.

Gruesse,
Johannes Distler
 
Zuletzt bearbeitet:
PHP:
<?php
$username = "foo";
$password = "bar";

if($_SERVER["PHP_AUTH_USER"] != $username || $_SERVER["PHP_AUTH_PW"] != $password) {
    header("WWW-Authenticate: Basic realm=\"test\"");
    header("HTTP/1.0 401 Unauthorized");
    echo "blabla.<br />\n";
    exit;
} else {
    echo "<pre>";
    print_r($_SERVER);
    echo "</pre>";
}
?>

So funktioniert das zumindest bei mir, mit einem Array sähe das ganze so aus:

PHP:
<?php
// $user[USERNAME] = PASSWORT

$user = array(
    "foo" => "098f6bcd4621d373cade4e832627b4f6", // pw = test
    "bar" => "be7b9bc2944e95b12c64142f826aada0"  // pw = tutorials
);

if (in_array($_SERVER["PHP_AUTH_USER"], $user) || $user[$_SERVER["PHP_AUTH_USER"]] != md5($_SERVER["PHP_AUTH_PW"])) {
    header("WWW-Authenticate: Basic realm=\"test\"");
    header("HTTP/1.0 401 Unauthorized");
    exit;
} else {
    echo "<pre>";
    print_r($_SERVER);
    echo "</pre>";
}
?>
 
achtung: "Weiterhin muss beachtet werden, dass dies unter dem Microsoft IIS mit der CGI-Version von PHP aufgrund einer Einschränkung des IIS nicht funktioniert."

Originalzitat aus dem php-manual
 
Original geschrieben von chibisuke
achtung: "Weiterhin muss beachtet werden, dass dies unter dem Microsoft IIS mit der CGI-Version von PHP aufgrund einer Einschränkung des IIS nicht funktioniert."

Originalzitat aus dem php-manual
Huch, glatt ueberlesen. :(
Dann werd ich mal PHP als API Modul verfrachten muessen. Gibt es irgendwelche Nach-/Vorteile zu der CGI Variante und wo finde ich die Bibliotheken dafuer? *duck*

// edit: Habs jetzt hinbekommen. Hoch lebe das PHP manual. :)

Gruesse & Danke,
Johannes Distler
 
Zuletzt bearbeitet:
Zurück