Puedes hacerlo completamente en JavaScript:
IE tiene (durante mucho tiempo) API estándar para borrar la caché de autenticación básica:
document.execCommand("ClearAuthenticationCache")
Debería volver verdadero cuando funciona. Devuelve ya sea falso, indefinido o explota en otros navegadores.
Los nuevos navegadores (a partir de diciembre de 2012: Chrome, Firefox, Safari) tienen un comportamiento "mágico". Si ven una solicitud de autenticación básica exitosa con cualquier otro nombre de usuario falso (digamos logout
), borran el caché de credenciales y posiblemente lo configuran para ese nuevo nombre de usuario falso, que debe asegurarse de que no sea un nombre de usuario válido para ver el contenido.
Un ejemplo básico de eso es:
var p = window.location.protocol + '//'
// current location must return 200 OK for this GET
window.location = window.location.href.replace(p, p + 'logout:password@')
Una forma "asíncrona" de hacer lo anterior es hacer una llamada AJAX utilizando el logout
nombre de usuario. Ejemplo:
(function(safeLocation){
var outcome, u, m = "You should be logged out now.";
// IE has a simple solution for it - API:
try { outcome = document.execCommand("ClearAuthenticationCache") }catch(e){}
// Other browsers need a larger solution - AJAX call with special user name - 'logout'.
if (!outcome) {
// Let's create an xmlhttp object
outcome = (function(x){
if (x) {
// the reason we use "random" value for password is
// that browsers cache requests. changing
// password effectively behaves like cache-busing.
x.open("HEAD", safeLocation || location.href, true, "logout", (new Date()).getTime().toString())
x.send("")
// x.abort()
return 1 // this is **speculative** "We are done."
} else {
return
}
})(window.XMLHttpRequest ? new window.XMLHttpRequest() : ( window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : u ))
}
if (!outcome) {
m = "Your browser is too old or too weird to support log out functionality. Close all windows and restart the browser."
}
alert(m)
// return !!outcome
})(/*if present URI does not return 200 OK for GET, set some other 200 OK location here*/)
También puede convertirlo en un marcador:
javascript:(function(c){var a,b="You should be logged out now.";try{a=document.execCommand("ClearAuthenticationCache")}catch(d){}a||((a=window.XMLHttpRequest?new window.XMLHttpRequest:window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):void 0)?(a.open("HEAD",c||location.href,!0,"logout",(new Date).getTime().toString()),a.send(""),a=1):a=void 0);a||(b="Your browser is too old or too weird to support log out functionality. Close all windows and restart the browser.");alert(b)})(/*pass safeLocation here if you need*/);