Есть ли способ выйти из аутентификации дайджеста, выполненной в php.
Я попробовал unset ($ _ SERVER ["PHP_AUTH_DIGEST"]); Но он не попросит переделать. Я знаю, если я закрою браузер, тогда он будет работать, и вот мои функции.
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; }
Что еще мне нужно добавить к функции выхода, чтобы закончить это.
Если я изменяю область, это работает, но я не хочу, чтобы он менялся.
Сброс $ _SERVER ['PHP_AUTH_DIGEST'] не будет иметь никакого эффекта. Проблема в том, что на задание, которое вы задали, нет «хорошего» ответа.
Спецификация HTTP технически не позволяет этого, но на практике большинство браузеров там будет эффективно «вывести пользователя из системы», если вы отправите им еще 401. На php.net/http-auth:
Как Netscape Navigator, так и Internet Explorer очистят кеш аутентификации локального браузера для области, получая ответ сервера 401. Это может эффективно «выйти из системы» пользователя, заставив их повторно ввести свое имя пользователя и пароль. Некоторые люди используют это для «тайм-аута» входа в систему или предоставляют кнопку «выхода из системы».
Из вашего кода самый простой метод, вероятно, что-то вроде:
function logout(){ header('HTTP/1.1 401 Unauthorized'); return true; }
но, опять же, на самом деле это не что-то одобренное спецификацией HTTP.
Авторитетный ответ: http://tools.ietf.org/id/draft-ietf-httpbis-p7-auth-12.txt – раздел 6.1
Нет надежного способа.
Некоторые обходные пути включают в себя фальсификацию 401 и изменение realm = или подтверждение запроса AJAX auth с целенаправленно недопустимыми учетными данными.