代码之家  ›  专栏  ›  技术社区  ›  Praneel PIDIKITI

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

  •  0
  • Praneel PIDIKITI  · 技术社区  · 16 年前

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

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

    请在这方面帮助我。

    3 回复  |  直到 16 年前
        1
  •  2
  •   bobince    16 年前

    在一个 XMLHttpRequest 应该导致有效凭据被丢弃,这不是您可以信赖的。它在许多浏览器中都能正常工作,但它完全没有标准化。Opera没有因为忽略证书而做错任何事。

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

    将此方法与 XMLHttpRequest请求 是目前为HTTP身份验证提供注销功能所能做的最好的事情。

        2
  •  0
  •   yogs    16 年前

    因此,您将不会有任何特定于浏览器的问题。

        3
  •  0
  •   Peter    13 年前

    最好是对破坏会话数据的页面进行ajax调用,比如注销.asp有一个电话 Session.Abandon() session_destroy() 在php语言中

    注销.php:

    <?php session_destroy();?>

    //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 在进行此注销呼叫的页面上