2010-09-01 27 views
0

J'utilise le mécanisme d'authentification de base pour mon site Web dans IIS. Pour déconnecter l'utilisateur que je utilise quelque chose de similaire à cette fonction JavaScript:Déconnexion via XMLHTTPRequest L'objet ne fonctionne pas dans Opera

function logoutUser() { 
    setTimeout('location.reload(true)', 1000); 
    xmlhttp = GetXmlHttpObject(); 
    if (xmlhttp==null) { 
    return; 
    } 
    //alert(xmlhttp); 
    var url = "index.php"; 

    xmlhttp.open("GET", url, true, "dummy_user", "dummy_password"); 

    xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
    xmlhttp.setRequestHeader('Accept', 'message/x-formresult'); 
    xmlhttp.send(null); 
    } 
    function GetXmlHttpObject() 
    { 
    if (window.XMLHttpRequest) 
    { 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    return new XMLHttpRequest(); 
    } 
    if (window.ActiveXObject) 
    { 
    // code for IE6, IE5 
    return new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    return null; 
    } 

L'idée est de forcer une demande avec des informations d'identification non valides, afin d'invalider les véritables références mises en cache par le navigateur.

Cela fonctionne très bien dans IE, Firefox, Safari, Google Chrome mais pas dans Opera.

S'il vous plaît aidez-moi à cet égard.

Répondre

2

La définition d'informations d'identification non valides dans un XMLHttpRequest doit entraîner l'annulation des informations d'identification valides. Il arrive à travailler dans de nombreux navigateurs mais ce n'est pas normalisé du tout. Opera ne fait rien de mal en ignorant les informations d'identification.

Il n'existe aucun moyen standard de supprimer les informations d'identification HTTP Basic Authentication. Il y a une autre façon qui fonctionne plus largement, qui est d'avoir un lien vers /logout, un script qui répond 401 lorsque l'utilisateur a informations d'identification valides au lieu de quand ils ne le font pas. Cela ouvre une boîte de dialogue auth, dans laquelle l'utilisateur peut remplir des valeurs non-sens ou simplement des chaînes vides; puis, lorsque /logout est à nouveau demandé, il accepte ces informations d'identification, en remplaçant les anciennes valeurs 'réelles'.

L'appariement de cette méthode et XMLHttpRequest est à peu près ce que vous pouvez faire de mieux pour fournir une fonctionnalité de déconnexion pour l'authentification HTTP aujourd'hui.

0

Utilisez une bonne bibliothèque JavaScript. eg.jQuery ... donc vous n'aurez aucun problème spécifique de navigateur.

0

Il vaudra mieux faire un appel ajax à une page qui détruit des données de session; une page comme logout.asp qui a un appel à Session.Abandon() ou session_destroy() en langage php

logout.php:

<?php session_destroy();?>

logout.aspx ou logout.asp:

//other functions can go here before ending the session

<% Session.Abandon() %>

puis la fonction javascript tion:

function(){ 
    $.ajax({ 
     url:'logout.php',//or logout.aspx or logout.asp 
     success:function(){location.reload();}, 
    }); 
} 

vous devez charger jquery.js sur la page qui fait cet appel logout