如何注销用户以进行基本的HTTP身份验证
答
是的,但它不是很顺畅。
您有一个特殊的脚本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而不是...]
重复的[如何使用BASIC认证注销用户从网站?](http://stackoverflow.com/questions/233507)。将信息整合到一个地方会很好。 – 2013-04-15 20:41:03