我有一个通过.htaccess登录的应用程序。当该人想要退出时,我使用:
function logout2() {try {
var agt=navigator.userAgent.toLowerCase(); if (agt.indexOf("msie") != -1) { // IE clear HTTP Authentication document.execCommand("ClearAuthenticationCache"); } else { var xmlhttp = createXMLObject(); xmlhttp.open("GET",".force_logout_offer_login_mozilla",true,"logout",""); xmlhttp.send(""); xmlhttp.abort(); } } catch(e) { alert("there was an error"); } function createXMLObject() { try { if (window.XMLHttpRequest) { xmlhttp =
new XMLHttpRequest(); } //代码 对于IE,如果 (window.ActiveXObject){
XMLHTTP =新 的ActiveXObject( “Microsoft.XMLHTTP”);
catch(e){xmlhttp = false} return xmlhttp; }
问题是这不适用于Safari,此人始终使用初始凭据登录,甚至关闭并重新打开浏览器。有谁知道如何处理这个?
答案 0 :(得分:1)
这是Mozilla的XMLHttpRequest实现的一个未记录的怪癖,它在XMLHttpRequest中发送错误的auth会影响将来主浏览器使用的auth。利用它来提供注销是一个合理的黑客攻击,但我不会指望它在将来工作,更不用说在其他浏览器上了。
我知道允许注销功能的唯一可靠的跨浏览器方式是将用户重定向到一个页面,当它们传入有效的身份验证凭据而不是无效凭证时,它们将为401。然后,登录用户将收到一个auth提示符,他们可以将其置于错误的身份验证中(通常您告诉他们只是将用户/传递字段留空)。该脚本对错误的身份验证做出积极响应(例如302),浏览器会记住它以备将来使用,覆盖之前的良好身份验证。
不幸的是,此过程确实需要一些重要的用户交互。这是HTTP身份验证的缺点之一。