我在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中没有。
请帮助我。
答案 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