如何正确地退出HTTP身份验证保护文件夹?
虽然有一些方法可以实现这一点,但它们潜在的危险性很高,因为它们可能存在漏洞或在某些情况/浏览器中无法工作。这就是为什么我正在寻找正确而干净的解决方案。
如何正确地退出HTTP身份验证保护文件夹?
虽然有一些方法可以实现这一点,但它们潜在的危险性很高,因为它们可能存在漏洞或在某些情况/浏览器中无法工作。这就是为什么我正在寻找正确而干净的解决方案。
我需要重置.htaccess授权,所以我使用了以下代码:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
}
?>
WWW-Authenticate
导致了问题,去掉它后自动注销了我。 - Michael<?php
header("Location: http://.@domain.com/log.php");
?>
log.php
<?php
header("location: https://google.com");
?>
$isLoggedIn
是用于 HTTP 认证的伪变量):function logout()
{
//$isLoggedIn = false; //This does not work (point of this question)
$_SESSION['logout'] = true;
}
function isLoggedIn()
{
return $isLoggedIn && !$_SESSION['logout'];
}
Session(会话)与http认证的状态有一定关联,因此只要用户保持浏览器打开并且http认证在浏览器中继续存在,用户就会一直保持注销状态。
我在一篇文章中总结了我的解决方案(https://www.hattonwebsolutions.co.uk/articles/how_to_logout_of_http_sessions),但是我使用了一个ajax调用和2个htaccess文件(如此问题所建议的:How to logout of an HTTP authentication (htaccess) that works in Google Chrome?)。
简而言之,你需要:
这避免了在注销文件夹中有一个次要弹出窗口请求另一个用户名(这会使用户感到困惑)。我的文章使用了Jquery,但应该可以避免使用它。
虽然其他人说从基本的HTTP身份验证注销是不可能的,但有办法实现类似的身份验证。一个明显的方法是使用auth_memcookie。如果你真的想要实现基本的HTTP身份验证(即使用浏览器对话框进行登录而不是HTTP表单),只需将身份验证设置为一个单独的.htaccess受保护目录,其中包含一个PHP脚本,该脚本在创建memcache会话后重定向回用户来的地方。
我通过发送401头部信息来实现这个功能。使用PHP可以很好地完成。
header('HTTP/1.0 401 Unauthorized');
这里有很多伟大而复杂的答案。在我的情况下,我找到了一个简单明了的解决方案来注销。我还没有在Edge中测试过。 在我登录的页面上,我放置了一个类似于以下链接的注销链接:
<a href="https://MyDomainHere.net/logout.html">logout</a>
而在那个logout.html页面的头部(也受到.htaccess的保护),我有一个类似于这样的页面刷新:
<meta http-equiv="Refresh" content="0; url=https://logout:logout@MyDomainHere.net/" />
在编程中,您可以将“注销”一词保留在原处,以清除缓存在站点上的用户名和密码。
我承认,如果需要从多个页面直接登录,那么每个入口点都需要有自己对应的logout.html页面。否则,您可以通过在实际登录提示之前引入一个额外的关卡步骤来集中注销过程,要求输入短语以到达登录目的地。
杂项 -> 清除私人数据 -> HTTP身份验证
- Yarin