Authentication 如何注销用户以进行基本HTTP身份验证
是否有一种解决方案可以注销用户(使浏览器清除其缓存的凭据并要求用户再次登录凭据)以进行基本HTTP身份验证 我已经仔细研究了以下问题:Authentication 如何注销用户以进行基本HTTP身份验证,authentication,browser,basic-authentication,Authentication,Browser,Basic Authentication,是否有一种解决方案可以注销用户(使浏览器清除其缓存的凭据并要求用户再次登录凭据)以进行基本HTTP身份验证 我已经仔细研究了以下问题: 是的,但它不是很平滑 您有一个特殊的脚本URL(例如/logout;与登录脚本一样,它必须位于webapp的根目录中,以确保将身份验证设置为正确的路径),它不需要有效的用户名/密码来继续,而需要无效的用户名/密码 因此,登录用户点击/logout,在授权标题中发送有效凭证。脚本响应401,浏览器弹出用户名/密码提示。您告诉用户在中输入假值(或者,在大多数浏
是的,但它不是很平滑 您有一个特殊的脚本URL(例如
/logout
;与登录脚本一样,它必须位于webapp的根目录中,以确保将身份验证设置为正确的路径),它不需要有效的用户名/密码来继续,而需要无效的用户名/密码
因此,登录用户点击/logout
,在授权
标题中发送有效凭证。脚本响应401
,浏览器弹出用户名/密码提示。您告诉用户在中输入假值(或者,在大多数浏览器中,也可以将其留空),然后点击OK。这将用无效凭据替换有效存储的凭据。然后,脚本返回“注销”页面或重定向回主页,用户不再登录
(注意:不幸的是,Safari会首先在没有任何凭据的情况下传递每个HTTP请求,只有在收到401
响应时才使用存储的凭据重试。这意味着您不应该将没有授权的请求作为注销脚本的OK头;它必须存在,即使其中包含空白凭据。这是不可原谅的。)ate行为还意味着您不能在同一URL下向Safari用户提供同一页面的登录和未登录版本,这会使Safari在浏览基本受保护的站点时变慢,因为每个页面请求都必须发生两次。)
有时也会使用另一种方法:使用JavaScript发送带有假用户名/密码组合的XMLHttpRequest
(例如xhr.open('GET'、'app'、'true'、'u'、'u')
)。这会产生非标准的副作用,即替换IE和Firefox中存储的凭据(但不是Opera;不确定其他凭据)
[啊,这太痛苦了。难怪每个人都用饼干来代替…]中建议的解决方案是将注销链接指向包含虚假凭据的URL,例如的副本。最好将信息合并到一个地方。@bobince,请您详细解释一下JavaScript解决方案。它对我不起作用。我必须以什么格式处理应用程序(/app)?