2009-07-22 98 views
26

可能重复:
HTTP authentication logout via PHP如何在使用.htaccess(和.htpasswd)身份验证时注销?

我有我的网站上使用.htaccess.htpasswd保护的一些功能。 当用户试图访问这个,他们会提示输入详细信息。他们输入他们的细节并进入并可以看到东西等所有工作正常。

我的问题是如何为这种类型的身份验证创建logout功能。我知道他们可以关闭浏览器窗口以“注销”。但这并不理想。你会给我什么建议?

谢谢。

+0

之前已经询问过,例如,请参阅http://stackoverflow.com/questions/449788/http-authentication-logout-via-php – VolkerK 2009-07-22 08:44:26

+0

没有任何形式的实现,没有写几行来删除会话,或重置标题。尝试直接的方法。 http://blog.acpmasquerade.com/2011/09/basic-http-authentication-straight.html#more – acpmasquerade 2011-09-06 13:44:12

回答

31

浏览器通常不支持此功能,请参阅How do I log out?

因为浏览器第一次开始 实施基本的身份验证, 网站管理员都希望 知道如何让用户注销。 由于浏览器缓存与认证 领域的用户名 和密码,如之前在本 教程中介绍,这是不是 服务器配置的功能,而是让浏览器 的 问题忘记了证书信息,所以 下次资源是 请求时,必须重新提供用户名和密码 。有 很多情况中,这是可取的 ,例如在公共场所使用 浏览器的时候,并没有 希望离开浏览器登录 ,让旁边的人可以得到 到您的银行帐户。

然而,尽管这也许是 最常见的问题有关 基本身份验证,迄今没有任何 各大浏览器厂商纷纷 看到了这一点作为一个理想的功能 投入到自己的产品。

因此,这个问题的答案是 问题是,你不能。抱歉。

有一些浏览器扩展可以让您清除站点的HTTP身份验证。 对于Firefox,WebDeveloper扩展(无论如何,这是我最喜欢的扩展之一)提供此功能。 这个菜单是Miscellaneous/Clear Private Data/HTTP Authentication

+0

啊,我明白了..谢谢。 – TigerTiger 2009-07-22 08:50:26

19

在firefox和chrome上测试。你可以做的是发送用户http://logout:[email protected]。这将用注销/注销(它可以是任何无效的用户/密码组合)替换他们当前的用户名/密码,并且由于他们现在具有错误的用户名/密码,他们将不得不再次登录才能访问该站点。

在opera上这不起作用,因为您可以同时拥有多个用户名/密码。它也无法在IE上运行,因为IE似乎不支持http://username:[email protected]网址。

2

它有可能退出。您应该实现注销页面,该页面将返回HTTP 401,直到用户输入BAD登录信息,然后在其他地方重定向。浏览器会记住接受的最新登录信息,因此会覆盖正确的登录信息。

但是这有点不可用,因为它需要用户的合作。

2

几年前我遇到过这个问题。发现每个人都有问题,而且似乎没有人希望以一般方式解决,这是令人难以置信的令人沮丧的。

正如Inadequate Logout functionality in HTTP Authentication所述,我认为答案是更改RFC以允许超时并支持注销按钮。作者的另一个建议是,服务器能够发送“注销”报头实际上不需要支持任何客户端用户代理支持,因为网站可以简单地在网页上包含链接到URL,该URL返回必要的响应代码和/或标题使当前会话无效。

相关问题