Autentificación Web con PHP:
Las características de autentificación HTTP en PHP solo están disponibles cuando se está ejecutando como un módulo en Apache y hasta ahora no lo están en la versión CGI. En un script PHP como módulo de Apache, se puede usar la función header() para enviar un mensaje de "Autentificación requerida" al navegador cliente haciendo que muestre una ventana de entrada emergente con nombre de usuario y contraseña. Una vez que el usuario ha rellenado el nombre y la contraseña, la URL que contiene el script PHP vuelve a ser llamada con las variables $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE rellenas con el nombre de usuario, la contraseña y el tipo de autentificación respectivamente. Sólo autentificación "Básica" esta soportada en este momento.
Ten cuidado cuando estés programando las lines de cabecera HTTP. Para garantizar la máxima compatibilidad con todos los clientes, la palabra clave "Basic" debe de ser escrita con "B" mayúscula, la cadena de texto debe estar incluida entre comillas dobles (no simples) y un espacio debe preceder el código "401" en la linea de cabecera "HTTP/1.0 401"
En vez de, sencillamente, mostrar $PHP_AUTH_USER y $PHP_AUTH_PW, seguramente querais comprobar la validez del nombre de usuario y la contraseña. Tal vez enviando una consulta a una base de datos o buscando el usuario en un fichero dbm.
Vigila aquí los navegadores Interner Explorer con bugs. Parecen muy quisquillosos con el orden de las cabeceras. Enviar la cabecera WWW-Autentificación antes que la cabecera HTTP/1.0 401 parece ser el truco por ahora.
Prueba este código a ver si te funciona:
<?php
if (!isset($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\n";
exit;
} else {
echo "<p>Hello $PHP_AUTH_USER.</p>";
echo "<p>You entered $PHP_AUTH_PW as your password.</p>";
}
?>
Más información en
http://www.php.net/manual/en/features.http-auth.php