PHP Diagest Auth, выйти
-
25-09-2019 - |
Вопрос
Есть ли способ выйти из выхода дайджеста аутентификации в PHP.
Я попробовал unset ($ _ сервер ["php_auth_digest"]); Но это не попросит Relogin. Я знаю, если я закрою браузер, то это будет работать, а вот мои функции.
function login(){
$realm = "Restricted area";
$users = array("jamesm"=>"");
if (empty($_SERVER["PHP_AUTH_DIGEST"])) {
header("HTTP/1.1 401 Unauthorized");
header("WWW-Authenticate: Digest realm=\"{$realm}\",qop=\"auth\",nonce=\"".uniqid()."\",opaque=\"".md5($realm)."\"");
return false;
}
if (!($data = http_digest_parse($_SERVER["PHP_AUTH_DIGEST"])) || !isset($users[$data["username"]]))
return false;
$A1 = md5($data["username"] . ":{$realm}:{$users[$data["username"]]}");
$A2 = md5($_SERVER["REQUEST_METHOD"].":{$data["uri"]}");
$valid_response = md5("{$A1}:{$data["nonce"]}:{$data["nc"]}:{$data["cnonce"]}:{$data["qop"]}:{$A2}");
if ($data["response"] != $valid_response)
return false;
return true;
}
function logout(){
unset($_SERVER["PHP_AUTH_DIGEST"]);
return true;
}
Что еще мне нужно добавить в функцию выхода из системы, чтобы завершить это.
Если я изменим царство, это работает, но я не хочу, чтобы это было изменено.
Решение
Unsetting $ _server ['php_auth_digest'] не будет влиять. Проблема в том, что на эту задачу не совсем «хороший» ответ.
HTTP Speciation не позволяет этому не разрешать, но на практике большинство браузеров там эффективно «входят в систему пользователя», если вы отправите им еще 401. PHP.net/http-auth:
Оба Netscape Navigator и Internet Explorer очистит кэш аутентификации локального окна локального браузера для царства при получении сервера отклика 401. Это может эффективно «выйти» пользователь, заставляя их повторно ввести их имя пользователя и пароль. Некоторые люди используют это в логинах «Time Out» или предоставляют кнопку «Выход».
Из вашего кода простейший метод, вероятно, что-то вроде:
function logout(){
header('HTTP/1.1 401 Unauthorized');
return true;
}
Но опять же, это на самом деле не что-то одобрено по спецификации HTTP.
Другие советы
Авторитетный ответ: http://tools.ietf.org/id/draft-p7-auth-httpbis-p7-auth-12.txt. - Раздел 6.1
Там нет надежного способа.
Некоторые обходные пути включают в себя подделку 401 и изменение realm = или подтверждают запрос AJAX AUTH с целенаправленно неверными полномочиями.