如果用户使用 windows auth 登录到我的站点,我如何注销该人以便他们必须再次进行身份验证?(这是使用 IIS)
例如,用户这样登录:
然后$_SERVER
变量包含:
[REMOTE_ADDR] => 172.34.567.891
[REMOTE_HOST] => 172.34.567.891
[REMOTE_PORT] => 44601
[REMOTE_USER] => DOMAIN\username
除非计算机重新启动,或者他使用不同的浏览器,否则不会再次要求用户使用 Windows auth 输入他的用户名或密码。
如何强制用户再次使用 PHP 进行身份验证?
更新:
我找到了一种方法来做到这一点,但它只适用于 chrome (所有其他浏览器只会抛出 401 未经授权,即使登录是正确的):
我的代码:
logout.php
//clear session
//then:
$user = isset($_SESSION['userName']);
$userNotSet = (!$user || (is_array($user) && count($user) == 0));
if(!isset($_SESSION['401']) && $userNotSet) {
$_SESSION['401'] = true;
$realm = 'mysite';
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
exit;
}
elseif($userNotSet) {
header('HTTP/1.1 401 Unauthorized');
list($domain, $user) = explode("\\", $_SERVER['REMOTE_USER']);
$_SESSION['userName'] = $user;
$_SESSION['LoggedIn'] = true;
}
else {
header('Location: '.WEBROOT.INDEX);
}
exit;
为什么这在 Chrome 之外的任何其他浏览器中都不起作用?有没有跨浏览器的解决方案?