Tuesday, 23 January 2018

HTTP authentication example with logout function

Due a user request I extended my older HTTP authentication snippet with a logout function.

This may also be achieved by using sessions, search the related
php.net page to find some more related snippets and comments.

Update: Sorry this does only work in Firefox.
In the Internet explorer this technique is disabled by default.
(You may look at the related links to find some further help.)

// The full url to this file is required for
// the Logout function
$CurrentUrl         = 'www.jonasjohn.de/test_login.php';

// Status flags:
$LoginSuccessful    = false;
$Logout             = false;

// Check username and password:
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){

    $usr = $_SERVER['PHP_AUTH_USER'];
    $pwd = $_SERVER['PHP_AUTH_PW'];

    // Does the user want to login or logout?
    if ($usr == 'jonas' && $pwd == 'foobar'){
        $LoginSuccessful = true;
    }
    else if ($usr == 'reset' && $pwd == 'reset' && isset($_GET['Logout'])){
        // reset is a special login for logout ;-)
        $Logout = true;
    }
}


if ($Logout){

    // The user clicked on "Logout"
    print 'You are now logged out.';
    print '<br/>';
    print '<a href="http://'.$CurrentUrl.'">Login again</a>';
}
else if ($LoginSuccessful){

    // The user entered the correct login data, put
    // your confidential data in here:
    print 'You reached the secret page!<br/>';
    print '<br/>';

    // This will not clear the authentication cache, but
    // it will replace the "real" login data with bogus data
    print '<a href="http://reset:reset@'. $CurrentUrl .'?Logout=1">Logout</a>';
}
else {

    /*
    ** The user gets here if:
    **
    ** 1. The user entered incorrect login data (three times)
    **     --> User will see the error message from below
    **
    ** 2. Or the user requested the page for the first time
    **     --> Then the 401 headers apply and the "login box" will
    **         be shown
    */

    // The text inside the realm section will be visible for the
    // user in the login box
    header('WWW-Authenticate: Basic realm="Top-secret area"');
    header('HTTP/1.0 401 Unauthorized');

    // Error message
    print "Sorry, login failed!\n";
    print "<br/>";
    print '<a href="http://' . $CurrentUrl . '">Try again</a>';

}

0 comments:

Post a Comment