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

Authentication 如何注销用户以进行基本HTTP身份验证,authentication,browser,basic-authentication,Authentication,Browser,Basic Authentication,是否有一种解决方案可以注销用户(使浏览器清除其缓存的凭据并要求用户再次登录凭据)以进行基本HTTP身份验证 我已经仔细研究了以下问题: 是的,但它不是很平滑 您有一个特殊的脚本URL(例如/logout;与登录脚本一样,它必须位于webapp的根目录中,以确保将身份验证设置为正确的路径),它不需要有效的用户名/密码来继续,而需要无效的用户名/密码 因此,登录用户点击/logout,在授权标题中发送有效凭证。脚本响应401,浏览器弹出用户名/密码提示。您告诉用户在中输入假值(或者,在大多数浏

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

我已经仔细研究了以下问题:


  • 是的,但它不是很平滑

    您有一个特殊的脚本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)?