Vous pouvez le faire entièrement en JavaScript:
IE a (depuis longtemps) une API standard pour effacer le cache d'authentification de base:
document.execCommand("ClearAuthenticationCache")
Devrait retourner vrai quand cela fonctionne. Renvoie soit faux, non défini ou explose sur d'autres navigateurs.
Les nouveaux navigateurs (depuis décembre 2012: Chrome, FireFox, Safari) ont un comportement "magique". S'ils voient une demande d'authentification de base réussie avec un autre faux nom d'utilisateur (disons logout
), ils effacent le cache des informations d'identification et le définissent éventuellement pour ce nouveau nom d'utilisateur faux, dont vous devez vous assurer qu'il ne s'agit pas d'un nom d'utilisateur valide pour afficher le contenu.
Un exemple de base de ceci 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@')
Une façon "asynchrone" de faire ce qui précède est de faire un appel AJAX en utilisant le 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 également en faire un bookmarklet:
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*/);