|
通用的 HTTP 认证代码 ~ admin
<?
// 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_AUTHORIZATION, 6))); //前六个字符是"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> |