HTTP-Authentifizierung Abmeldung über PHP
Was ist der richtige - Anmeldung, die aus der HTTP-Authentifizierung geschützten Ordner?
Gibt es workarounds, wie Sie diese erreichen können, aber Sie sind potenziell gefährlich, weil Sie buggy sind oder nicht funktionieren in bestimmten Situationen /Browser. Das ist, warum ich bin auf der Suche nach korrekte und saubere Lösung.
InformationsquelleAutor der Frage Josef Sábl | 2009-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mu. Keine richtige Möglichkeit bestehtauch nicht eine, die konsistent in allen Browsern.
Dies ist ein problem, das kommt von der HTTP-Spezifikation (Ziffer 15.6):
Auf der anderen Seite, Abschnitt 10.4.2 sagt:
In anderen Worten, Sie können in der Lage sein zu zeigen, das login-Feld wieder (wie @Karsten sagt), aber den browser nicht haben, um Ihrer Anfrage nachzukommen - also verlassen Sie sich nicht auf dieses (fehl -) Funktion zu viel.
InformationsquelleAutor der Antwort Piskvor
Methode, die funktioniert gut in Safari. Funktioniert auch in Firefox und Opera, aber mit einer Warnung.
Erzählt diese browser öffnen-URL mit dem neuen Benutzernamen überschreiben Vorherige.
InformationsquelleAutor der Antwort Kornel
Die einfache Antwort ist, dass Sie nicht zuverlässig log von http-Authentifizierung.
Die lange Antwort:
Http-auth (wie der rest der HTTP-spec) gemeint ist, zu Staatenlosen. Also "angemeldet" oder "abgemeldet" ist nicht wirklich ein Konzept, dass Sinn macht. Der bessere Weg, es zu sehen, ist zu Fragen, für jede HTTP-Anforderung (und erinnere mich an einen laden der Seite ist in der Regel mehrere Anfragen), "sind Sie erlaubt zu tun, was Sie anfordern?". Der server erkennt jede Anfrage als neue und nicht auf etwaige frühere Anträge.
Browser gewählt haben, zu erinnern, die Anmeldeinformationen, die Sie erzählen, die Sie auf die erste 401, und erneut senden, ohne das der Benutzer ausdrücklich die Berechtigung auf spätere Anforderungen. Dies ist ein Versuch, sodass der Benutzer das "logged in/logged out" - Modell, das Sie erwarten, aber es ist rein ein Schlamassel. Es ist die browserdass die Simulation diese Persistenz des Staates. Der web-server ist komplett nicht bewusst.
Also "Abmelden" im Zusammenhang mit der http-auth ist rein eine simulation im browser, und damit außerhalb des Verantwortungsbereiches der server.
Ja, es gibt kludges. Aber Sie brechen RESTful-ness (wenn es das ist von Wert für Sie) und Sie sind unzuverlässig.
Wenn Sie absolut erfordern angemeldet/abgemeldet-Modell für Ihre Website-Authentifizierung, die beste Wette ist ein tracking-cookie, mit der Persistenz der Zustand auf dem server gespeichert werden, in irgendeiner Weise (mysql, sqlite-flatfile, etc.). Dies erfordert, dass alle Anfragen ausgewertet werden, zum Beispiel mit PHP.
InformationsquelleAutor der Antwort Jonathan Hanson
Abhilfe
Können Sie dies mit Javascript:
Was ist zu tun oben:
für IE - nur klar, auth-cache und leiten irgendwo
für andere Browser - senden Sie eine XMLHttpRequest-hinter den kulissen mit 'logout' login-name und Passwort. Wir brauchen, um es zu senden, um einen Pfad zurückkehren 200 OK die Anforderung (D. H. es sollte nicht die HTTP-Authentifizierung).
Ersetzen
'/where/to/redirect'
mit einem Weg zu redirect nach der Abmeldung und ersetzen'/path/that/will/return/200/OK'
mit einem Weg auf Ihrer Website zurückkehren 200 OK.InformationsquelleAutor der Antwort Anton Mochalin
Abhilfe (nicht sauber, schön (oder sogar arbeiten! siehe Kommentare) - Lösung):
Deaktivieren Sie seine Anmeldeinformationen einmal.
Können Sie die HTTP-Authentifizierung-Logik auf PHP durch senden der entsprechenden Header (falls nicht eingeloggt):
Und die Analyse der Eingaben mit:
So deaktivieren seine Zugangsdaten einmal sollte trivial sein.
InformationsquelleAutor der Antwort Karsten
Abmeldung von HTTP-Basic-Auth in zwei Schritten
Sagen wir, ich habe eine HTTP-Basic-Auth-realm namens "Passwort-geschützt", und Bob angemeldet ist. Melden Sie sich ich 2 von AJAX-Anfragen:
WWW-Authenticate: Basic realm="Password protected"
In diesem Punkt browser vergessen Bobs Anmeldeinformationen.
InformationsquelleAutor der Antwort Vlad GURDIGA
Meine Lösung für das problem ist folgende. Sie finden die Funktion
http_digest_parse
,$realm
und$users
im zweiten Beispiel auf dieser Seite: http://php.net/manual/en/features.http-auth.php.InformationsquelleAutor der Antwort Pie86
In der Regel, sobald ein browser gefragt, den Benutzer zur Eingabe von Anmeldeinformationen und versorgten Sie auf eine bestimmte web-Website, wird es auch weiterhin tun, ohne weitere Aufforderung. Im Gegensatz zu den verschiedenen Möglichkeiten können Sie cookies löschen, die auf der client-Seite, ich weiß nicht, einen ähnlichen Weg zu bitten, den browser zu vergessen seine gelieferten Anmeldeinformationen für die Authentifizierung.
InformationsquelleAutor der Antwort Greg Hewgill
Trac standardmäßig verwendet die HTTP-Authentifizierung als auch. Abmelden funktioniert nicht und kann nicht behoben werden:
Aus: http://trac.edgewall.org/ticket/791#comment:103
Sieht aus wie, dass es keine funktionierende Antwort auf die Frage, das Problem wurde gemeldet, der vor sieben Jahren und es macht perfekten Sinn: HTTP ist stateless. Entweder ein Antrag gemacht wird mit den Anmeldeinformationen für die Authentifizierung oder nicht. Aber das ist eine Frage, sendet der client die Anforderung, nicht der server ist, es zu empfangen. Der server kann nur sagen, wenn eine Anfrage-URI-Berechtigung wird benötigt oder nicht.
InformationsquelleAutor der Antwort hakre
Musste ich zurücksetzen .htaccess-Autorisierung, damit ich diese verwendet:
Ihn hier gefunden :
http://php.net/manual/en/features.http-auth.php
Gehen Abbildung.
Einer Reihe von Lösungen, die sich auf dieser Seite, und es sogar Hinweise auf der Unterseite: Lynx, nicht klar, das auth-wie bei anderen Browsern 😉
Getestet habe ich es auf meinem Computer installierten Browser und einmal geschlossen, jeder browser so wie es scheint, konsequent erfordert reauth auf Wiedereintritt.
InformationsquelleAutor der Antwort Dooley
Dies ist vielleicht nicht die Lösung, die gesucht wurde, aber ich löste es wie folgt.
ich habe 2 scripts für den logout-Prozess.
logout.php
log.php
Diese Weise habe ich nicht bekommen, eine Warnung und meine Sitzung beendet wird
InformationsquelleAutor der Antwort Kevin
AFAIK, gibt es keine saubere Art und Weise zu implementieren, eine "logout" - Funktion bei der Verwendung von htaccess (also HTTP-basiert) Authentifizierung.
Dies ist, weil diese Authentifizierungsmethode verwendet das HTTP-Fehler-code '401', um dem browser mitzuteilen, dass die Anmeldeinformationen erforderlich sind, an welcher Stelle der browser fordert den Benutzer auf, die details. Von da an, bis der browser geschlossen wird, wird es immer senden Sie die Anmeldeinformationen, ohne weitere Aufforderung.
InformationsquelleAutor der Antwort Alnitak
Die beste Lösung, die ich gefunden, so weit ist (es ist eine Art pseudo-code, der
$isLoggedIn
ist pseudo-Variablen für http-auth):In der Zeit von "logout" speichern nur einige Infos zu der session sagen, dass Benutzer tatsächlich abgemeldet.
In dem Ort, wo ich für die Authentifizierung überprüfen ich die Bedingung erweitern:
Sitzung ist etwas verknüpft, um den Status der http-Authentifizierung, damit Benutzer bleibt angemeldet, so lange wie er hält den browser öffnen und so lange, wie die http-Authentifizierung besteht im browser.
InformationsquelleAutor der Antwort Josef Sábl
Vielleicht fehlt mir der Punkt.
Der zuverlässigste Weg, die ich gefunden habe, zu Ende die HTTP-Authentifizierung ist, schließen Sie den browser und alle browser-Fenster. Sie können schließen eines browser-Fensters mithilfe von Javascript, aber ich glaube nicht, dass Sie können schließen Sie alle browser-Fenster.
InformationsquelleAutor der Antwort Toby Allen
Während die anderen sind richtig, wenn er sagt, dass seine unmöglich für die Abmeldung von basic-http-Authentifizierung gibt es Möglichkeiten, um die Authentifizierung zu implementieren, die Verhalten ähnlich. Eine offensichtliche appeoach ist die Verwendung auth_memcookie. Wenn Sie wirklich wollen, zu implementieren Basic-HTTP-Authentifizierung (D. H. die Nutzung der browser-Dialoge für die Anmeldung in trather als ein HTTP-Formular) - nur legen Sie die Authentifizierung auf einem separaten .htaccess geschützten Verzeichnis ein PHP-script, das leitet zurück, wo te user kam nach createing der memcache session.
InformationsquelleAutor der Antwort symcbean
Gibt es eine Menge großartiger - komplexer, die Antworten hier. In meinem speziellen Fall, ich fand eine saubere und einfache Lösung für das logout. Ich muss noch testen, im Rand.
Auf meiner Seite dass ich angemeldet haben, ich habe platziert eine logout-link ähnlich diesem:
Und in den Kopf, dass logout.html Seite (die ist auch geschützt durch die .htaccess) habe ich eine Aktualisierung der Seite ähnlich wie diese:
Wo Sie verlassen würde, die Worte "Abmelden" zu deaktivieren Sie das Benutzername-und Passwort-Cache für die site.
Ich gebe zu, dass, wenn mehrere Seiten benötigt werden, um in der Lage zu sein, direkt angemeldet, um von Anfang an, jeder dieser Punkte für die Einreise benötigen würde, Ihre eigenen entsprechenden logout.html Seite. Ansonsten könnte man zentralisieren Sie die Abmeldung durch die Einführung einer zusätzlichen gatekeeper Schritt in dem Prozess vor dem eigentlichen login-prompt, erfordern die Eingabe einer phrase, zu erreichen ein Ziel von login.
InformationsquelleAutor der Antwort johnwayne
Die einzige wirksame Methode die ich gefunden habe, zu tilgen, die
PHP_AUTH_DIGEST
oderPHP_AUTH_USER
UNDPHP_AUTH_PW
Anmeldeinformationen ist der Aufruf der header -HTTP/1.1 401 Unauthorized
.InformationsquelleAutor der Antwort CIRCLE