Я бы установил его там, где, если кто-то отправит запрос «Выход», он автоматически переведет их на страницу с сообщением «успешный выход из системы». Если клиент пытается нажать кнопку «Назад» или перейти в ограниченную зону, он снова запросит подтверждение HTTP.PHP: HTTP Basic - Выход из системы
То, что я до сих пор это:
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
Пользователь успешные визиты example.com/logout.php если пример. com/limited/index.php? logout. Когда пользователь пытается вернуться, однако случайные вещи случаются, иногда он будет запрашивать HTTP-аутентификацию дважды (???), иногда он будет продолжать запрашивать аутентификацию в цикле (?), И иногда это позволит мне вернуться назад, как если бы Я никогда не выходил из системы.
Я новичок в том, как работают сессии, но я понимаю следующее: если/когда человек проверен, он хранит переменную в ее сеансе с именем login со значением true ... если каждый из них получает запрос GET с logout, он затем удалит эту переменную сеанса и вернется к logout.php ... Почему же тогда, когда я нажимаю на индекс, он вернет меня обратно без запроса аутентификации, когда сеанс [login] предположительно не установлен ,
Любое улучшение этого кода PHP оценивается. Я знаю, что я не должен использовать HTTP Basic и должен включать SQL, но meh. Это временное решение.
Редактировать: Я приму решение с MySQL, если приведен пример с инструкциями. У меня нет знания баз данных MySQL или PHP (пока)
Без сеансов лучше всего изменить основную строку царства. – stillstanding
Разве это не столько усилия для временного решения? –
@ на самом деле главная проблема - КОГДА его отправить. Как отличить вызов от зарегистрированного пользователя и звонок от выбывшего из него: –