header('www-Authenticate ...') Problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I can't remember where the example below came from, but the event handler 
for the 're-authenticate' button doesn't allow a re-authentication 
following a successful login. If you run the code, it allows you to login 
the first time, or even catch the incorrect password and display via the 
line with the comments in the authenticate function after 3 failures. But 
after a successful login, trying to re-authenticate by hitting the button 
only redisplays the network login box without the password. And after 3 
failures, 
"Password = " . "$_SERVER['PHP_AUTH_PW']" displays just "Password = " so 
obviously $_SERVER['PHP_AUTH_PW'] is never getting a value the second time 
through. 

This IS NOT a mission critical problem, but it is bugging me. It perhaps 
is an Apache issue...?

Testing environment is Win2k, Apache 1.3.31 with SSL ( though behavior is 
the same on Apache without SSL), and PHP 4.3.7.

Comment very welcomed.

Thanks much,

David

<?php

ERROR_REPORTING(E_ALL ^ E_NOTICE);

  function authenticate()
  {
        header('WWW-Authenticate: Basic realm="Test Authentication 
System"');
        header('HTTP/1.0 401 Unauthorized');
/** ? **/  echo "Password = " . $_SERVER['PHP_AUTH_PW'] . "<BR>"; // used 
for debugging
        echo "You must enter a valid login name and password to access 
this resource\n";
        exit;
  }

$qualifiedUsers = array('user1, user2');
$qualifiedPasswords = array('password1, password2');

/**********************************************************************
 *      reset event handler does not work as expected                *
 **********************************************************************/
if(IsSet($_POST['authenticator']) && $_POST['authenticator'])
{
        unset($qualifiedUsers);
        unset($qualifiedPasswords);
        unset($_SERVER['PHP_AUTH_USER']);
        unset($_SERVER['PHP_AUTH_PW']);
        unset($_POST['authenticator']);
}
/***********************************************************************/

// no username
if(!isset($_SERVER['PHP_AUTH_USER']))
{
        authenticate();
}
//username but not on list
elseif(isset($_SERVER['PHP_AUTH_USER']) &&
        !in_array($_SERVER['PHP_AUTH_USER'], $qualifiedUsers))
{
        authenticate();
}
//username ok, but no PW or not on list
elseif(isset($_SERVER['PHP_AUTH_USER']) &&
                in_array($user = $_SERVER['PHP_AUTH_USER'], 
$qualifiedUsers) &&
                !isset($_SERVER['PHP_AUTH_PW']) ||
                !in_array($_SERVER['PHP_AUTH_PW'], $qualifiedPasswords))
{
        authenticate();
}

//username / PW ok
elseif(isset($_SERVER['PHP_AUTH_USER'])  &&
        in_array($user = $_SERVER['PHP_AUTH_USER'], $qualifiedUsers) &&
        isset($_SERVER['PHP_AUTH_PW']) &&
                in_array($pw = $_SERVER['PHP_AUTH_PW'], $qualifiedUsers))
{
        echo "Welcome, {$_SERVER['PHP_AUTH_USER']}, using password 
{$_SERVER['PHP_AUTH_PW']}.";
        echo "<form action='$_PHP_SELF' METHOD='POST'>\n";
        echo "<input type='hidden' name='SeenBefore' value='1'>\n";
        echo "<input type='submit' name=authenticator value='Re 
Authenticate'>\n";
        echo "</form></p>\n";
}

unset($_SERVER['PHP_AUTH_USER']);
unset($_SERVER['PHP_AUTH_PW']);

?>

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux