Выход из системы через XMLHTTPRequest Объект не работает в Opera - PullRequest
0 голосов
/ 01 сентября 2010

Я использую базовый механизм аутентификации для своего сайта в 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 ]

2 голосов
/ 01 сентября 2010

То, что установка неверных учетных данных в XMLHttpRequest должна привести к тому, что допустимые учетные данные будут отброшены, не является чем-то, на что вы можете положиться.Это работает во многих браузерах, но не стандартизировано.Opera не делает ничего плохого, игнорируя учетные данные.

Не существует стандартного способа вызвать удаление учетных данных базовой аутентификации HTTP.Есть еще один способ, который работает более широко: ссылка на /logout, скрипт, который отвечает 401, когда пользователь имеет действительные учетные данные, а не когда их нет.Это откроет диалоговое окно авторизации, в котором пользователь может заполнить пустые значения или просто пустые строки;затем при повторном запросе /logout он принимает эти учетные данные, заменяя старые «настоящие».

Сопряжение этого метода и XMLHttpRequest - лучшее, что вы можете сделать, чтобы обеспечить возможность выхода из системы для аутентификации HTTPсегодня.

0 голосов
/ 13 сентября 2012

Лучше будет сделать ajax-вызов на страницу, которая уничтожает данные сеанса;страница типа logout.asp, на которой есть вызов Session.Abandon() или session_destroy() на языке php

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 настраница, которая делает этот вызов вызова

0 голосов
/ 01 сентября 2010

Используйте любую хорошую библиотеку JavaScript.eg.jQuery ... так что у вас не будет проблем с браузером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...