Да, но это не очень гладко.
У вас есть специальный URL-адрес скрипта (например, /logout
, как и сценарий входа в систему, он должен находиться в корневом каталоге webapp, чтобы убедиться, что auth установлен в правильный путь), который вместо того, чтобы требовать действительного имени пользователя/пароля для continue, требуется недействительный.
Таким образом, вошедший пользователь посетил /logout
, отправив действительные учетные данные в заголовок Authorization
. Ваш скрипт отвечает 401
, а браузер выдает приглашение имени пользователя и пароля. Вы говорите, что пользователь вводит ложные значения (или, в большинстве браузеров, просто оставляя его пустым, тоже ОК) и нажмите «ОК». Это заменяет допустимые хранимые учетные данные неверными. Затем ваш сценарий возвращает страницу «вышла из системы» или перенаправляется на главную страницу, и пользователь больше не выполнил вход в систему.
(Уход: Safari, к сожалению, передает каждый HTTP-запрос без каких-либо учетных данных, снова с сохраненными учетными данными, если он получает ответ 401
.Это означает, что вы не должны принимать запрос без заголовка Authorization
как ОК для сценария выхода из системы, он должен присутствовать, даже если с пустыми учетными данными в нем. Это неудачное поведение также означает вы не можете предоставить зарегистрированную и незарегистрированную версию той же страницы для пользователей Safari по тому же URL-адресу, что делает Safari медленным при просмотре сайтов с защитой базы, поскольку каждый запрос страницы должен произойти дважды.)
Существует другой способ, Используемое время: используйте JavaScript для отправки XMLHttpRequest
с поддельным именем пользователя/паролем (например, xhr.open('GET', '/app', true, '_', '_')
). Это имеет нестандартный побочный эффект замены хранимых учетных данных в IE и Firefox (но не в Opera, а не на других).
[Ugh. Это боль. Неудивительно, что каждый использует файлы cookie вместо этого ...]
Дубликат [Как выйти из интернет-сайта с использованием аутентификации BASIC?] (Http://stackoverflow.com/questions/233507). Было бы неплохо объединить информацию в одном месте. –