Axel: PHP_AUTH_USER löschen

Hallo Leute,

ich möchte einen Zugang per htaccess wieder rückgängig machen, wie bei PHPMyAdmin. So dass sich der Besucher wieder neu Authentifizieren muss. Sowas in der Art, als wenn er sich von einer Session ausloggt.
Wenn $_SERVER['PHP_AUTH_USER'] gelehrt wird mit $_SERVER['PHP_AUTH_USER']=''; reicht das nicht aus. Beim nächsten Aufruf ist sie wieder auf den vorherigen Wert gesetzt. Kann mir jemand da weiterhelfen.

Axel

  1. Kann mir jemand da weiterhelfen.

    Ich kenne mich mit dem Zeug nicht aus, aber es wird doch wohl so sein, dass irgendwo eine Nutzer- und Berechtigungsliste liegt. Da musst Du ran. Und dokumentiert ist das bestimmt sogar hier bei SELFHTML.

    Poste mal einen Verweis auf die Lösung, täte mich interessieren.

  2. echo $begrüßung;

    ich möchte einen Zugang per htaccess wieder rückgängig machen, wie bei PHPMyAdmin. So dass sich der Besucher wieder neu autorisieren muss. Sowas in der Art, als wenn er sich von einer Session ausloggt.
    Wenn $_SERVER['PHP_AUTH_USER'] gelehrt wird mit $_SERVER['PHP_AUTH_USER']=''; reicht das nicht aus. Beim nächsten Aufruf ist sie wieder auf den vorherigen Wert gesetzt. Kann mir jemand da weiterhelfen.

    geleert = leer gemacht
    gelehrt = Wissen beigebracht

    HTTP-Autorisierung funktioniert anders als klassische An-/Abmeldesysteme. Der Browser sendet einen Request an eine Seite. Die sagt ihm 401. Daraufhin zeigt er dem Benutzer den Dialog zum Eingeben von Benutzername und Passwort. Mit diesen Daten im Schlepptau wiederholt er den Request und bekommt die gewünschte Ressource ausgeliefert. Diese Daten versendet er nun bei jedem weiteren Request ungefragt und automatisch mit. Der Benutzer bekommt davon nichts mit. Ein Abmelden müsste darin bestehen, dass der Browser aufhört, die Anmeldedaten mitzusenden.
    Das ständige Mitsenden muss so sein, da HTTP ein zustandsloses Protokoll ist. Jeder Request ist für sich selbst zu betrachten. Der Webserver muss auch für jeden Request neu nachsehen, ob die Anmeldedaten stimmen, bzw. genauer: ob mit diesen Anmeldedaten dieser Request beantwortet werden soll. Der Browser hört auf, die Anmeldedaten mitzusenden, wenn der Server ihm sagst, damit sei er nicht mehr autorisiert (401). Was aber zur Folge hat, dass das Anmeldefenster dem Benutzer wieder erscheint und möglicherweise die im Browser dauerhaft gespeicherten Anmeldedaten verworfen werden, was den Anwender sicher nicht freuen wird.

    PHP kennt übrigens ein eigenes Kapitel zum Thema HTTP authentication with PHP, in dem (oder dessen Userkommentaren) auch irgendwo was zum "Abmelden" steht, wenn ich mich recht erinnere.

    echo "$verabschiedung $name";

    1. Hallo dedlfix,

      also nicht mit .htaccess sondern über PHP-Script.

      Axel

      1. echo $begrüßung;

        also nicht mit .htaccess sondern über PHP-Script.

        .htaccess ist eine Konfigurationsdatei des Apachen. Es dürft recht schwierig werden, sie so zu gestalten, dass der Apache ein 401 rausschickt aufgrund einer Entscheidung, die du erst in deinem PHP-Script triffst; der Entscheidung, dass der Benutzer _jetzt_ nicht mehr angemeldet sein soll.

        Beim Schreiben obigen Satzes fiel mir doch noch eine Idee ein. Das Ergebnis funktioniert zwar, ist aber, wie erwartet, nicht sehr benutzerfreundlich. Aber das bekommst du mit PHP weder besser noch anders hin.

        AuthType Basic  
        AuthName "Geschützte Ressource"  
        AuthUserFile /path/to/users/file  
        Require valid-user  
          
        <Files logoff>  
          Require user inexistent  
        </Files>
        

        Alles was im Einflussbereich dieser .htaccess liegt, benötigt einen validen Benutzer aus /path/to/users/file. Der User "inexistent" darf in der Datei nicht enthalten sein. Für das Anfordern der Ressource logoff werden Anmeldedaten benötigt, die der Browser nicht hat, woraufhin er mit dem Mitsenden der ihm bekannten Daten aufhört und mit dem Benutzer erneut in Kontakt tritt, damit dieser die Anmeldedaten eingeben kann.
        Wenn du also deinen Benutzer dazu bringst, auf einen Link zu klicken, der den Browser veranlasst, die Ressource logoff anzufordern, bekommt der Browser ein 401 zur Antwort und der Benutzer das Anmeldefenster angezeigt. Das kann er nun so oft mit OK bestätigen, bis er schwarz wird. Oder er geht auf "Abbrechen" und bekommt die zum 401er Statuscode gehörende Fehlerseite. Für alle anderen Ressourcen, auf die diese .htaccess wirkt, versucht der Browser nun erneut vom Benutzer die Anmeldedaten eingegeben oder bestätigt zu bekommen. Übrigens, meine Vermutung, dass der Browser die Anmeldedaten aus seinem "Gespeicherte Passwörter"-Speicher entfernt, trifft zumindest beim Firefox nicht zu.

        Es muss auch keine Datei namens logoff in diesem Verzeichnis liegen. Der Apache greift nie darauf zu, weil ja die Autorisierung nicht erfolgreich abgeschlossen werden kann.

        echo "$verabschiedung $name";

    2. Der Browser hört auf, die Anmeldedaten mitzusenden, wenn der Server ihm sagst, damit sei er nicht mehr autorisiert (401).

      Ich glaube es wurde gefragt warum das so ist bzw. wann dieser Fall genau eintritt.