Простой ответ заключается в том, что вы не можете надежно выйти из http-аутентификации.
Длинный ответ:
Http-auth (как и остальная часть спецификации HTTP) подразумевает отсутствие состояния. Таким образом, «войти» или «выйти» на самом деле не имеет смысла. Лучший способ убедиться в этом - спросить для каждого HTTP-запроса (и помните, что загрузка страницы обычно состоит из нескольких запросов): «Вам разрешено делать то, что вы запрашиваете?». Сервер видит каждый запрос как новый и не связанный с любыми предыдущими запросами.
Браузеры решили запомнить учетные данные, которые вы сообщаете им на первых 401, и повторно отправлять их без явного разрешения пользователя на последующие запросы. Это попытка дать пользователю ожидаемую модель «вошел / вышел», но это просто помеха. Это браузер, который имитирует эту устойчивость состояния. Веб-сервер совершенно не знает об этом.
Таким образом, «выход из системы» в контексте http-auth является чисто симуляцией, предоставляемой браузером, и поэтому находится вне полномочий сервера.
Да, есть кладжи. Но они нарушают RESTful-ность (если это имеет значение для вас), и они ненадежны.
Если вам абсолютно необходима модель входа в систему / выхода из нее для проверки подлинности вашего сайта, лучшим выбором будет файл cookie для отслеживания с сохранением состояния на сервере каким-либо образом (mysql, sqlite, flatfile и т. Д.). Это потребует оценки всех запросов, например, с помощью PHP.