是否有解决方案注销用户(使浏览器清除其缓存的凭据并要求用户再次登录凭据)以进行基本的HTTP身份验证?
我已经查看了以下问题:
答案 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代替......]