PHP HTTP 认证实例详解
hp来实现http的强制认证是十分简单的,只需简单的几行代码就可以实现,下面我们来看一个例子,然后结合这里例子我向大家详细介绍一下php实现http认证。
<?php if(!isset($_server['php_auth_user'])) { header('www-authenticate: basic realm="系统名称"'); header('http/1.0 401 unauthorized'); echo '未通过http认证.'; exit; } else { echo '认证通过.'; echo '用户名: '.$_server['php_auth_user']."\n"; echo '密码: '.$_server['php_auth_pw']."\n"; } ?>
1.实现说明
怎么样,看到上面的代码了吧,就这么几行添加到你的程序页面上就可以实现了.
它是通过利用header()函数向客户端浏览器发送”authentication required”信息,强制其弹出一个用户名/密码输入窗口,当用户输入用户名和密码后,包含有url的php脚本将会加上预定义变量php_auth_user, php_auth_pw和auth_type然后再次调用,这三个变量分别表示用户名,密码和认证类型(从php5.0.1起开始支持”basic”和”digest”两种认证方式),它们被保存在$_server(从hp>>4.1.0起有效)或$http_server_vars(从php3起有效)数组中具体应用时,我们可以把验证的几行代码写成函数,只要判断到用户变量不存在或验证不正确就一直执行该函数并弹出窗口,而且还可以设置错误登录几次就不允许该用户访问,具体的使用大家使劲的发散思考吧.
2.注意事项:
1.这段代码必须放到程序的开始,且在其开始执行之前不能有任何输出(若有输出则需要使用输出缓冲函数才行).
2.php的http认证机制仅在php以apache模块方式运行时才有效,这个容易理解,它本身是http强制认证,肯定是不适合于cgi版本,不能在命令行下执行的.
3.header发送标头代码时请小心.为了对所有的客户端保证兼容性,关键字”basic”的第一个字母必须大写为”b”,分界字符串必须用双引号引用(不能是单引号);在http/1.0和401之间必须有且仅有一个空格.
4.在上面列子中,仅输出了用户名和密码,而在实际系统中则可按照登录验证流程进行与数据库或其他方式进行判断和验证.
5.从php4.3.0起,为防止有人通过编写脚本来从页面上获取密码,当外部认证对特定页面有效,并且安全模式被开启时,php_auth变量将不会被设置.可以用remote_user来辨别外部认证的用户,用authtype指令来判断外部认证机制是否有效.
6.要想让http认证能够在iis下工作,php配置选项cgi.rfc2616_headers必须设置为0(默认值).
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!