Vous pouvez le faire entièrement en JavaScript:
IE a (longtemps) API standard pour la compensation de l'Authentification de Base de cache:
document.execCommand("ClearAuthenticationCache")
Doit retourner true quand il fonctionne. Retourne false, indéfinis ou des coups sur les autres navigateurs.
Les nouveaux navigateurs (à compter de Décembre 2012: Chrome, FireFox, Safari) ont "magie" de comportement. Si ils voient un succès basic auth demande avec tout bidon autre nom d'utilisateur (disons logout
) qu'ils effacer le cache des informations d'identification et, éventuellement, de la définir pour que les nouveaux faux nom d'utilisateur, vous devez vous assurer que c'est pas un nom d'utilisateur valide pour l'affichage du contenu.
Exemple de base de ce qui est:
var p = window.location.protocol + '//'
// current location must return 200 OK for this GET
window.location = window.location.href.replace(p, p + 'logout:password@')
Un "asynchrone" façon de faire le ci-dessus est de faire un appel AJAX en utilisant l' logout
nom d'utilisateur. Exemple:
(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*/)
Vous pouvez faire un bookmarklet trop:
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*/);