如何针对基本的HTTP身份验证注销用户

3

1
重复的问题:如何使用基本身份验证注销网站用户?建议将信息整合到一个地方。 - system PAUSE
2个回答

6

2
是的,但不是很顺畅。
您需要一个特殊的脚本URL(例如/logout;与登录脚本类似,它必须位于Web应用程序的根目录中,以确保身份验证设置为正确的路径),而不是要求有效的用户名/密码才能继续,需要无效的凭据。
因此,已登录的用户点击/logout,在Authorization头中发送有效凭据。您的脚本响应401,浏览器弹出用户名/密码提示框。您告诉用户输入虚假值(或者在大多数浏览器中,只需将其留空即可),然后单击“确定”。这将使用无效的凭据替换存储的有效凭据。您的脚本然后返回一个“已注销”的页面或重定向回主页,并且用户不再登录。
(注意:不幸的是,Safari首先通过没有任何凭证的HTTP请求传递,仅在收到401响应后尝试使用存储的凭证进行尝试。这意味着您不应该将没有Authorization头的请求视为注销脚本的OK;它必须存在,即使其中包含空凭证。这种不幸的行为还意味着您不能为Safari用户在同一URL下提供已登录和未登录版本的相同页面,并且它使Safari浏览基本受保护的网站变慢,因为每个页面请求都必须发生两次。)
还有另一种方法:使用JavaScript发送带有虚假用户名/密码组合的XMLHttpRequest(例如xhr.open('GET', '/app', true, '_', '_'))。这具有在IE和Firefox中替换存储凭据的非标准副作用(但不是Opera;不确定其他浏览器)。
[噫。这真是一件痛苦的事情。难怪每个人都使用cookie而不是...]

@bobince,您能否详细解释一下JavaScript的解决方案。它对我不起作用。 - Marco
我需要以什么格式来访问应用程序(/app)? - Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接