Los contenidos de $_SERVER son, al igual que $_ENV y al contrario que otras superglobales, de
solo lectura, lo que significa que no puedes ir por ahí alegremente modificándolas.
PHP_AUTH_USER y PHP_AUTH_PW son cubiertas por el cliente en presencia de un campo WWW-Authenticate en la cabecera de la petición, al introducir sus credenciales, y el servidor web se las devuelve a tu aplicación.
¡Pero tú no puedes manualmente negar el hecho de que el usuario haya introducido esos datos! Porque eso sería mentir a la lógica ;)
En lugar de ello, si quieres seguir utilizando la autenticación HTTP como tu método de inicio de sesión, para cerrarla debes, además de utilizar cookies si quieres, cambiar la
Realm de tu aplicación, invalidando las credenciales del navegador.
De todos modos, debes saber que el modo para que los navegadores que cumplan los estándares cierren tu sesión y se olviden de la cuenta abierta es cerrar la aplicación.
Pero si quieres no depender del usuario, y que vuelva a pedir credenciales, puedes hacer algo como:
Código PHP:
if($accion == 'login') {
if(!isset($_SESSION['realmid'])) $_SESSION['realmid'] = mt_rand(500, 600);
header('WWW-Authenticate: basic realm="Mi aplicación web, tmp:'.$_SESSION['realmid']'"');
}
if($accion == 'logout') {
$_SESSION['realmid']++;
}
No sé si entiendes por donde van los tiros en mi código.. ;)