Ich würde es einrichten, wo, wenn jemand eine Anfrage "Abmeldung" sendet es automatisch zu einer Seite mit der Meldung "erfolgreich abmelden". Wenn der Kunde versucht, den Zurück-Knopf zu drücken oder in den Sperrbereich zu gehen, wird er erneut nach HTTP-Auth fragen.PHP: HTTP Basic - Abmelden
Was ich bisher habe, ist dies:
example.com/restricted/index.php:
<?php
session_start();
if(isset($_GET['logout']))
{
unset($_SESSION["login"]);
header("location: ../logout.php");
exit;
}
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || !isset($_SESSION["login"]))
{
header("HTTP/1.0 401 Unauthorized");
header("WWW-authenticate: Basic realm=\"Tets\"");
header("Content-type: text/html");
$_SESSION["login"] = true;
// Print HTML that a password is required
exit;
}
?>
// The rest of the page is then displayed like normal
Der Benutzer erfolgreich Besuche example.com/logout.php wenn Beispiel. com/restricted/index.php? Logout ist zugegriffen. Wenn der Benutzer versucht, zurückzugehen, aber zufällige Dinge passieren, wird er manchmal zweimal nach HTTP-Authentifizierung fragen (???), manchmal wird er nach Authentifizierung in einer Schleife fragen (?) Und manchmal lässt er mich gleich wieder gehen Ich habe mich nie ausgeloggt.
Ich bin neu, wie Sitzungen arbeiten, aber mein Verständnis ist dies: Wenn/wenn die Person validiert ist, speichert es eine Variable in seiner Sitzung namens Login mit einem Wert von True ... wenn es jeder bekommt eine GET-Anfrage mit Logout, es wird dann diese Session-Variable löschen und zurück zur Logout.php ... Warum ist es dann, wenn ich zurück auf den Index klicke, lass es mich wieder rein, ohne nach Authentifizierung zu fragen, wenn Session [Login] angeblich nicht gesetzt ist .
Jede Verbesserung dieses PHP-Codes wird geschätzt. Ich weiß, dass ich HTTP Basic nicht verwenden sollte und SQL einbeziehen sollte, aber meh. Dies ist eine vorübergehende Lösung.
Edit: Ich werde eine Lösung mit MySQL akzeptieren, wenn ein Beispiel mit Anweisungen enthalten sind. Ich habe keine MySQL oder PHP-Datenbank-Kenntnisse (noch)
Ohne Sitzungen sollten Sie die grundlegende Realm-Zeichenfolge ändern. – stillstanding
Ist es nicht so viel Aufwand für nur eine vorübergehende Lösung? –
@stillstanding das Hauptproblem ist WANN, es zu senden. Wie kann ich einen Anruf von einem angemeldeten Benutzer und einen Anruf von einem abgemeldeten unterscheiden? –