2

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

我已经查看了以下问题:

4

2 回答 2

5

回答另一个问题时提出的解决方案是将注销链接指向包含虚假凭据的 URL,例如http://log-me-out:fake-pwd@example.com/logout

于 2013-01-15T11:15:13.620 回答
2

是的,但它不是很顺利。

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

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

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

有时会使用另一种方法:使用 JavaScript 发送XMLHttpRequest带有假用户名/密码组合(例如xhr.open('GET', '/app', true, '_', '_'))的 an。这具有替换 IE 和 Firefox 中存储的凭据的非标准副作用(但不是 Opera;不确定其他)。

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

于 2010-11-11T12:55:07.007 回答