通过XMLHTTPRequest对象注销在Opera中不起作用

时间:2010-09-01 15:03:32

标签: html ajax xmlhttprequest

我在IIS中使用我的网站的基本身份验证机制。要注销用户,我使用类似于这个JavaScript函数的东西:

  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;
    }

我们的想法是强制使用一些无效凭据的请求,以使浏览器缓存的真实凭据无效。

它在IE,Firefox,Safari,Google Chrome中运行良好,但在Opera中没有。

请帮助我。

3 个答案:

答案 0 :(得分:2)

XMLHttpRequest中设置无效凭据会导致丢弃有效凭据并不是您可以信赖的。它恰好在许多浏览器中工作,但它根本没有标准化。通过忽略凭证,Opera没有做错任何事情。

没有标准方法可以删除HTTP基本身份验证凭据。还有一种方法可以更广泛地运行,即链接到/logout,当用户拥有有效凭据时,该代码会响应401,而不是。这将弹出一个auth对话框,用户可以在其中填写无意义的值或只是空字符串;然后,当重新请求/logout时,它会接受这些凭据,替换旧的“真实”凭证。

配对此方法和XMLHttpRequest是您今天为HTTP身份验证提供注销功能的最佳方法。

答案 1 :(得分:0)

使用任何好的JavaScript库。 eg.jQuery ... 所以你没有任何特定于浏览器的问题。

答案 2 :(得分:0)

最好对破坏会话数据的页面进行ajax调用;像logout.asp这样的页面,可以用php语言调用Session.Abandon()session_destroy()

logout.php:

<?php session_destroy();?>

logout.aspx或logout.asp:

//other functions can go here before ending the session

<% Session.Abandon() %>

然后是javascript函数:

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

您应该在进行此注销调用的页面上加载jquery.js