Intereting Posts
Рекурсивная функция возвращает значение null Как отключить сообщения валидации на стороне клиента активной формы в Yii 2? Как передать пользователю ввести сумму суммы в paypal Как преобразовать API Instagram в JSON в XML с PHP? Загрузка / изменение изображения PHP создает черное изображение Как создать unicode slug для заголовка unicode? Загружать самоподписанный сертификат ssl в телеграмму Вопросы PHP UTF-8 – Если я создаю строку в PHP … это в UTF-8? Paypal перенаправляет на успех после оплаты, не добавляя его в базу данных. Не удалось отправить Push-уведомление Обновите первую строку mysql php PHP cURL, как добавить значение User Agent или прервать серверы, блокирующие запросы cURL? Нет следующего набора результатов. Пожалуйста, вызовите mysqli_more_results () / mysqli :: more_results (), чтобы проверить, следует ли вызывать эту функцию / метод Как получить кол-во комментариев в Disqus? Как отправить cookie с помощью PHP curl в дополнение к CURLOPT_COOKIEFILE?

PHP Digest auth, выход из системы

Есть ли способ выйти из аутентификации дайджеста, выполненной в 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 с целенаправленно недопустимыми учетными данными.