精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● PHP>>实用技巧>>通用的 HTTP 认证代码

主题:通用的 HTTP 认证代码
发信人: dalasthunder(Dallas)
整理人: dalasthunder(2002-07-25 07:02:35), 站内信件
<?
// HTTP 认证代码,本程序在 Apache 与 IIS 下都能正常运行

// IIS 属性页中 Directory Security 一栏中的 Anonymous access and authentication control,
// 点击 Edit ,其中的 Authenticated access 内
//   Digest authentication for Windows domain servers
//   Basic authentication
//   Integrated Windows authentication
// 三项(或所有的项目)都不要选中。
// PHP 不需要加载入 ISAPI Filters。

// 需要在 php.ini 中设置 register_gloables = On 才能正常运行
// 否则需要将 $PHP_AUTH_USER 改成 $_SERVER["PHP_AUTH_USER"] ,其余类推

// 在 IIS 下,$PHP_AUTH_USER 变量与 $PHP_AUTH_PW 变量为空,取而代之的是 $HTTP_AUTHORIZATION
// 所以该 if 语句仅会在 IIS 或类似 Web Server 下执行
if ($PHP_AUTH_USER == "" && $PHP_AUTH_PW == "" && ereg("^Basic "$HTTP_AUTHORIZATION)) {
    
// 对 $HTTP_AUTHORIZATION 用 base64 解码并给 $PHP_AUTH_USER 和$PHP_AUTH_PW 赋值
    
list($PHP_AUTH_USER$PHP_AUTH_PW) = explode(":"base64_decode(substr($HTTP_AUTHORIZATION6))); //前六个字符是"Basic ",所以过滤掉
}
// 默认尚未验证通过
$authenticated 0;
if (
$PHP_AUTH_USER != "" || $PHP_AUTH_PW != "") {
    
// 在这里放置自己的用户名/密码验证代码
    // 如果验证通过给 $authenticated 赋值 true
    
$authenticated = ($PHP_AUTH_USER == "Dallas" && $PHP_AUTH_PW == "123456");
}
if(!
$authenticated) {
    
// 弹出登录窗口,在输入用户名密码之后程序会从头开始运行
    
header("WWW-Authenticate: Basic realm=\"HTTP 密码认证\"");
    if (
ereg("Microsoft"$SERVER_SOFTWARE))
        
header("Status: 401 Unauthorized");
    else
        
header("HTTP/1.0 401 Unauthorized");
    
// 以下代码仅在点击登录窗口中的 Cancel 按钮或者密码输入错误三次之后运行
    
echo "用户名/密码不对";
    exit;
}
// 以下代码在成功认证之后才会运行
?>
<html>
<head><title>通用HTTP认证代码</title></head>
<body>
<?
    echo "<P>你输入的用户名是:\"$PHP_AUTH_USER\"";
    echo 
"<P> 你输入的密码是:\"$PHP_AUTH_PW\"";
    echo 
"<P>你的认证字符串是:\"$HTTP_AUTHORIZATION\"";
    echo 
"<P>可以在这里放一个 phpinfo() 函数看看 _SERVER 变量。";
?>
</body>
</html>



----
┏━━━━┯━━━━┓
┃孝敬父母│爱护兄弟┃
┠────┼────┨
┃体贴老婆│关心朋友┃
┗━━━━┷━━━━┛
       

[关闭][返回]