如何注销用户以进行基本的HTTP身份验证

问题描述:

是否有解决方案来注销用户(使浏览器清除其缓存的凭据并要求用户再次登录凭据)进行基本HTTP身份验证?如何注销用户以进行基本的HTTP身份验证

我已经通过了以下问题看:

+1

重复的[如何使用BASIC认证注销用户从网站?](http://stackoverflow.com/questions/233507)。将信息整合到一个地方会很好。 – 2013-04-15 20:41:03

是的,但它不是很顺畅。

您有一个特殊的脚本URL(例如/logout;如登录脚本,它必须位于webapp的根目录以确保auth设置为正确的路径),而不需要输入有效的用户名/密码继续,需要一个无效的。

因此,登录用户点击/logout,在Authorization标头中发送有效凭证。你的脚本响应401,浏览器弹出一个用户名/密码提示。你告诉用户把错误的值(或者,在大多数浏览器中,只是把它留空也可以),然后点击OK。这将用有效的存储凭证替换为无效的凭证。您的脚本然后返回一个“注销”页面或重定向回主页,并且用户不再登录。

(小心:Safari,可悲的是,先通过每个没有任何凭证的HTTP请求,只尝试如果获得401响应,这又意味着您不应该将没有Authorization标头的请求作为退出脚本执行;即使使用空白凭证,它也必须存在,这种不良行为也意味着您无法在同一网址下向Safari用户提供已登录且未登录的相同版本的版本,并且由于每个页面请求都必须发生两次,所以Safari浏览基本保护网站时速度较慢。)

还有另外一种方法是一些使用次数:使用JavaScript发送带有伪造用户名/密码组合的XMLHttpRequest(例如xhr.open('GET', '/app', true, '_', '_'))。这有非标准的副作用,取代IE和Firefox中存储的凭证(但不是Opera;不知道其他的)。

[呃。这是一个痛苦。难怪大家都使用cookies而不是...]

+0

谢谢! JavaScript选项适用于我。 – Dhaval 2010-11-13 11:31:16

+0

@bobince,能否请您多解释一下JavaScript解决方案。它不适用于我 – Marco 2016-12-08 09:55:14

+0

以什么格式解决应用程序(/ app)? – Marco 2016-12-08 10:12:42

answer to another question中提出的解决方案是将注销链接指向包含假凭证的URL,例如http://log-me-out:[email protected]/logout