Chciałbym ustawić, gdzie jeśli ktoś wyśle żądanie "wyloguj", automatycznie przeniesie je na stronę z napisem "pomyślne wylogowanie". Jeśli klient spróbuje nacisnąć przycisk Wstecz lub przejść do obszaru zastrzeżonego, poprosi o ponowne uwierzytelnienie HTTP.PHP: HTTP Basic - Wylogowanie
Co mam tak daleko jest taka:
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
Użytkownik udane wizyty example.com/logout.php jeśli przykładem. Dostęp do komendy com/restricted/index.php? logout. Kiedy użytkownik próbuje wrócić, jakkolwiek przypadkowe rzeczy się zdarzają, czasami będzie prosić o uwierzytelnienie HTTP dwa razy (???), czasami będzie prosić o uwierzytelnienie w pętli (?), A czasami pozwoli mi wrócić z powrotem, jak gdyby Nigdy się nie wylogowałem.
Jestem nowy, jak działają sesje, ale moje zrozumienie jest następujące: Jeśli/kiedy osoba jest zatwierdzona, przechowuje zmienną w swojej sesji o nazwie login z wartością true ... jeśli każda otrzyma żądanie GET z wyloguj się, następnie usunie tę zmienną sesji i wróci do logout.php ... Dlaczego to jest, gdy kliknę z powrotem do indeksu, pozwoli mi wrócić bez pytania o uwierzytelnienie, kiedy sesja [login] prawdopodobnie nie jest ustawiona .
Wszelkie ulepszenia tego kodu PHP są mile widziane. Wiem, że nie powinienem używać HTTP Basic i powinien zawierać SQL, ale meh. To jest tymczasowe rozwiązanie.
Edytuj: Przyjmę rozwiązanie z MySQL, jeśli dołączony jest przykład z instrukcjami. Nie mam MySQL lub PHP, bazy wiedzy (jeszcze)
Bez sesji najlepszym wyjściem jest zmiana podstawowego ciągu dziedzinowego. – stillstanding
Czy to nie tyle wysiłki, tylko tymczasowe rozwiązanie? –
@stosowanie się do głównego problemu to KIEDY go wysłać. Jak odróżnić połączenie od zalogowanego użytkownika od wywołania z wylogowanego :) –