Bạn có thể làm điều đó hoàn toàn bằng JavaScript:
IE có API tiêu chuẩn (trong một thời gian dài) để xóa bộ đệm Xác thực cơ bản:
document.execCommand("ClearAuthenticationCache")
Nên trả lại đúng khi nó hoạt động. Trả về sai, không xác định hoặc thổi lên trên các trình duyệt khác.
Các trình duyệt mới (kể từ tháng 12 năm 2012: Chrome, FireFox, Safari) có hành vi "ma thuật". Nếu họ thấy một yêu cầu xác thực cơ bản thành công với bất kỳ tên người dùng giả nào khác (giả sử logout
), họ sẽ xóa bộ đệm thông tin đăng nhập và có thể đặt nó cho tên người dùng không có thật mới, mà bạn cần chắc chắn rằng đó không phải là tên người dùng hợp lệ để xem nội dung.
Ví dụ cơ bản về điều đó là:
var p = window.location.protocol + '//'
// current location must return 200 OK for this GET
window.location = window.location.href.replace(p, p + 'logout:password@')
Một cách "không đồng bộ" để thực hiện ở trên là thực hiện cuộc gọi AJAX sử dụng logout
tên người dùng. Thí dụ:
(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*/)
Bạn cũng có thể biến nó thành 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*/);