Nixwisser: Abbrechen-Button im HTTP-Auth-Dialog abfragen

Beitrag lesen

  1. Server, Antwort: 401 und "<html>..Authentifizierung nötig..bla..bla..</html>"

ich bekomme keine Authentifizierungsaufforderung vom SERVER. Das macht mein Script.

Dein Skript _ist_ der Server. Welcher Mechanismus da nun genau verantwortlich ist, ist für die Betrachtung von außen, also vom Browser her, erstmal unwichtig.

Mein PHP-Script schickt also diesen Header:
Header("WWW-Authenticate: Basic realm="Anmeldebereich"");
ist das der falsche?

Nein, der ist richtig, aber dazu gehört besagter 401-Fehler, also

header('HTTP/1.0 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Anmeldebereich"');

  1. Abbrechen gedrückt
    Erkennung: Nicht möglich, da der Browser keine weitere Anfrage an den Server schickt.
    Aktion: Nicht möglich, da keine Erkennung.
    Browser: Zeigt die Seite an, die beim letzten 401 geschickt wurde.

Und die wird bei mir nicht angezeigt, sondern erscheint nur im Quelltext.

Vielleicht ist der fehlende 401 das Problem (so er denn fehlt, ist ein Schuss ins Blaue).

Falls Du mit Firefox probierst, solltest Du Dir aber in jedem Fall die LiveHTTPHeaders-Erweiterung  besorgen und nachschauen, was der Server ausspuckt; insbesondere die Status- (erste Zeile der Serverantwort, "HTTP/1.0 123 blafasel") sowie die Content-Type-Zeile sind interessant.

Also habe ich in der httpd.conf eine Zeile eingfügt, die im Fehlerfall auf meine Fehlerseite leiten soll:
ErrorDocument 401 /fehlerseite.html

Das bringt Dir nichts. ErrorDocument ist dafür gedacht, statt der in den Server fest eingebauten Fehlermeldungen eigene auszugeben. Bei PHP ist das aber irgendwo irrelevant, weil Du durch PHP schon die Möglichkeit bekommst, eine eigene Meldung auszugeben, nämlich direkt in dem Skript, das auch den Fehlercode ausgibt.

Wenn Du also folgendes hast,

if ([falsche oder keine Benuterdaten]) {
    header('HTTP/1.0 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Anmeldebereich"');
    echo "<html><body>Kein Zugang mit diesen Daten</body></html>"; // Dies ist die Fehlerseite.
    exit;
}
echo "blafasel"; // Hier ist die normale Seite.

dann müsste der Browser bei Abbruch den Text "Kein Zugang mit diesen Daten" anzeigen.

Bitte _keine_ Weiterleitungen, dafür besteht keine Veranlassung.

Aber wie soll ich denn auf die Fehlerseite kommen?

Direkt ausgeben, siehe oben.

Nur zur Begrifflichkeit: ErrorDocument ist (normalerweise) keine Weiterleitung, von einer "Weiterleitung an die Fehlerseite" zu sprechen kann daher etwas verwirrend sein.

Wie dem auch sei - falls es nicht an dem fehlenden 401 liegt, wäre es hilfreich, wenn Du Deinen Code mal bis auf das Wesentliche (lies: Zugangsdatenprüfung (mit festem Name/Passwort-Paar) und Verzweigung, das sollten nur ein oder zwei Dutzend Zeilen sein) zusammenkürzt, es mit diesem Rohbau probierst und, falls es mit dem nicht funktioniert, diesen Rohbau hier mal veröffentlichst.