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

时间:2010-11-11 12:03:36

标签: authentication browser basic-authentication http-basic-authentication

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

我已经查看了以下问题:

2 个答案:

答案 0 :(得分:4)

answer to another question中提出的解决方案是将注销链接指向包含虚假凭据的网址,例如http://log-me-out:fake-pwd@example.com/logout

答案 1 :(得分:2)

是的,但不是很顺利。

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

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

(关注:Safari,遗憾的是,首先传递每个HTTP请求而没有任何凭据,只有在收到401响应的情况下再次尝试使用存储的凭据。这意味着您不应该收到没有{{1的请求对于注销脚本,标题可以正常;它必须存在,即使其中包含空白凭据。这种不幸的行为也意味着您无法提供同一页面的登录和未登录版本Safari用户使用相同的URL,这使得Safari在浏览受基本保护的网站时变慢,因为每个页面请求都必须发生两次。)

有时会使用另一种方式:使用JavaScript发送带有假用户名/密码组合的Authorization(例如XMLHttpRequest)。这具有替换IE和Firefox中存储的凭证的非标准副作用(但不是Opera;不确定其他的)。

[呃。这是一种痛苦。难怪每个人都使用cookies代替......]

相关问题