2009-11-09 6 views
0

J'ai une application qui se connecte via .htaccess. Lorsque la personne veut déconnectiez, je l'utilise:Supprimer les informations d'identification htaccess dans Safari

fonction 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(); } // code pour IE si (window.ActiveXObject) {
xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP"); }} Catch (e) {xmlhttp = false} return }

Le problème est que cela ne fonctionne pas pour Safari, la personne est toujours connecté en utilisant les informations d'identification initiales, même la fermeture et la réouverture du navigateur. Est-ce que quelqu'un sait comment gérer cela?

Répondre

1

L'implémentation XMLHttpRequest de Mozilla n'est pas documentée. L'envoi d'une mauvaise authentification dans un XMLHttpRequest affecte l'authentification utilisée par le navigateur principal à l'avenir. Tirer parti de ceci pour fournir la déconnexion est un hack raisonnable pour l'instant, mais je ne compterais pas dessus fonctionnant dans le futur, encore moins sur d'autres navigateurs.

Le seul navigateur fiable que je connaisse pour autoriser une fonction de déconnexion est de rediriger l'utilisateur vers une page qui va les 401 lorsqu'ils transmettent authentifications valides, au lieu de celles valides. Ensuite, un utilisateur connecté sera accueilli avec une invite d'authentification, dans laquelle il peut mettre une mauvaise authentification (normalement, vous lui dites de laisser les champs utilisateur/passe vides). Le script répond positivement (par exemple 302) à la mauvaise authentification et le navigateur se souvient de lui pour l'avenir, en écrasant le bon auth précédent.

Malheureusement, ce processus nécessite une interaction importante avec l'utilisateur. C'est l'un des inconvénients de l'authentification HTTP.

Questions connexes