首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >http基本身份验证“注销”

http基本身份验证“注销”
EN

Stack Overflow用户
提问于 2010-11-12 17:20:14
回答 8查看 58K关注 0票数 65

HTTP基本身份验证凭据会一直存储到浏览器关闭,但是有没有办法在浏览器关闭之前删除这些凭据呢?

我读到过一篇关于trick with HTTP 401 status code的文章,但它看起来像是work not properly (参见注释来回答)。也许是mechanism trac uses is the solution

是否可以使用JavaScript删除凭据?或者使用JavaScript和status 401技巧的组合?

EN

回答 8

Stack Overflow用户

发布于 2015-05-19 00:27:34

对1月的答案进行扩展,并更新owyongsk的答案:

下面是一些示例jquery java-script代码,它会导致浏览器向您试图保护的页面发送一个虚假的登录请求,这在所有测试的浏览器中都会导致缓存的凭据被删除,然后将用户重定向到一个未受保护的页面。

出错时的alert()可能应该更改为其他值。

代码语言:javascript
复制
//Submits an invalid authentication header, causing the user to be 'logged out'
function logout() {
    $.ajax({
        type: "GET",
        url: "PUT_YOUR_PROTECTED_URL_HERE",
        dataType: 'json',
        async: true,
        username: "some_username_that_doesn't_exist",
        password: "any_stupid_password",
        data: '{ "comment" }'
    })
//In our case, we WANT to get access denied, so a success would be a failure.
.done(function(){
    alert('Error!')
})
//Likewise, a failure *usually* means we succeeded.
//set window.location to redirect the user to wherever you want them to go
.fail(function(){
    window.location = "/";
    });
}

然后,就像让注销链接调用logout()函数一样简单,而且它似乎对用户来说是无缝工作的,尽管从技术上讲这仍然是一项黑客工作。

票数 10
EN

Stack Overflow用户

发布于 2013-06-08 00:46:01

你可以用最新的Chrome和Firefox尝试一下目前正在运行的黑客攻击。在您的服务器上创建一个"/logout“页面,该页面只接受特定的凭证,例如用户名: false,密码: false。然后使用下面的AJAX请求,您可以将用户发送到该页面。

代码语言:javascript
复制
  $("#logout").click(function(e){                                              
    e.preventDefault();                                                        
    var request = new XMLHttpRequest();                                        
    request.open("get", "/logout", false, "false", "false");                                                                                                                               
    request.send();                                                            
    window.location.replace("WHEREVER YOU WANT YOUR LOGGED OUT USER TO GO");                                              
  });

发生的情况是,错误的用户名和密码从有效的XMLHttpRequest缓存,而不是从当前用户的凭据缓存,当用户尝试登录任何页面时,它将使用缓存的假凭据,如果身份验证失败,它将要求用户输入另一个凭据。希望这能有所帮助!

票数 7
EN

Stack Overflow用户

发布于 2011-07-30 13:21:15

刚刚完成了一个对我来说运行良好的实现:在服务器上,我评估会话、用户名和密码,因此我跟踪这些信息,登录算法如下:

1.检查用户和密码是否不为空,否则返回401。

2.检查是否已在登录用户列表中注册了会话,如果没有,则检查用户和密码是否有效,如果有效,则将会话id保存在列表中,然后返回401。我将解释这一步骤:如果会话id不同,则会发生以下三种情况之一: a)用户正在打开另一个窗口。b)用户会话已结束,即用户已注销。c)会话由于处于非活动状态而过期。但是只要用户凭证有效,我们就希望保存会话,但返回401要求输入密码一次,如果不保存会话,则用户永远无法登录,因为我们的列表中没有新的会话id。

3.检查用户凭证是否正确,如果正确,则保存会话信息并继续服务页面,否则返回401。

因此,当用户请求注销页面时,当web浏览器再次显示登录对话框时,我要注销用户的唯一方法是关闭服务器上的会话。

我在想,当我写这篇文章时,必须有一个步骤,程序会检查用户是否已经登录,以避免模拟,也许我可以为每个用户保存多个会话id,以允许多个会话,嗯,我希望您对此发表意见。

希望你明白这一点,如果你看到任何安全缺陷,请发表评论;)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4163122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档