ISAPI模式下用 PHP4进行HTTP认证的方法
时间:2006-02-23 来源:redware
在 PHP 4.3.3 之前,由于微软 IIS 的限制,HTTP 认证无法工作在 IIS 服务器的 CGI 模式下。为了能够使其在 PHP 4.3.3 以上版本能够工作,需要编辑 IIS 的设置“目录安全”。点击“编辑”并且只选择“匿名访问”,其它所有的复选框都应该留空。(经测试,PHP4.3.4在Windows Server 2003的ISAPI模式下也要这样设置)
在 IIS 的 ISAPI 模式下使用 PHP 4 的时候,无法使用 PHP_AUTH_* 变量,而只能使用 HTTP_AUTHORIZATION。例如,考虑如下代码:list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));。
IIS 注意事项: 要 HTTP 认证能够在 IIS 下工作,PHP 配置选项 cgi.rfc2616_headers 必须设置成 0(默认值)。
所以通过上面的修改后,下面以phpMyAdmin2.7.0中config.default.php文件为例来说明如何实现ISAPI模式下用PHP4进行HTTP认证:
1、将以下代码复制到config.default.php的最前面
在 IIS 的 ISAPI 模式下使用 PHP 4 的时候,无法使用 PHP_AUTH_* 变量,而只能使用 HTTP_AUTHORIZATION。例如,考虑如下代码:list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));。
IIS 注意事项: 要 HTTP 认证能够在 IIS 下工作,PHP 配置选项 cgi.rfc2616_headers 必须设置成 0(默认值)。
所以通过上面的修改后,下面以phpMyAdmin2.7.0中config.default.php文件为例来说明如何实现ISAPI模式下用PHP4进行HTTP认证:
1、将以下代码复制到config.default.php的最前面
<?php // if we are using IIS, we need to set $PHP_AUTH_USER and $PHP_AUTH_PW list($PHP_AUTH_USER, $PHP_AUTH_PW) = explode(':', base64_decode(substr($HTTP_AUTHORIZATION, 6))); if (!isset($PHP_AUTH_USER) || !isset($PHP_AUTH_PW) || $PHP_AUTH_USER=='' || $PHP_AUTH_PW=='') { Header("WWW-Authenticate: Basic realm=\"MySQL Logon\""); Header("HTTP/1.0 401 Unauthorized"); die("MySQL Login fail!"); } ?> 2、查找config.default.php文件的以下各行,修改后为:
但仍有一个不完善的地方,就是用户名或密码输入错误,则需要等到后面的程序运行后才能判断出来(错误信息为:用户名/密码错误,访问被拒绝。)。这时IE浏览器只需关闭当前窗口然后重新打开IE浏览器即可;Firefox浏览器则需要“工具”→“清除私有数据”→……然后才能解决问题。 详情及参考文献 |
相关阅读 更多 +