本文实例讲述了php基于表单密码验证与HTTP验证用法。分享给大家供大家参考。具体分析如下:
PHP 的 HTTP 认证机制仅在 PHP 以 Apache 模块方式运行时才有效,因此该功能不适用于 CGI 版本。在 Apache 模块的 PHP 脚本中,可以用 header() 函数来向客户端浏览器发送“Authentication Required”信息,使其弹出一个用户名/密码输入窗口。当用户输入用户名和密码后,包含有 URL 的 PHP 脚本将会加上预定义变量 PHP_AUTH_USER , PHP_AUTH_PW 和 AUTH_TYPE 被再次调用,这三个变量分别被设定为用户名,密码和认证类型。预定义变量保存在 $_SERVER 或者 $HTTP_SERVER_VARS 数组中。支持“Basic”和“Digest”(自 PHP 5.1.0 起)认证方法。感兴趣的朋友可以参阅header()函数相关信息。
PHP 版本问题: Autoglobals 全局变量,包括 $_SERVER 等,自 PHP 4.1.0 起有效, $HTTP_SERVER_VARS 从 PHP 3 开始有效。
以下是在页面上强迫客户端认证的脚本范例.
例子 34-1. Basic HTTP 认证范例
 代码如下:<?php 
   if (!isset( $_SERVER [ 'PHP_AUTH_USER' ])) {  
     header ( 'WWW-Authenticate: Basic realm="My Realm"' );  
     header ( 'HTTP/1.0 401 Unauthorized' );  
    echo 'Text to send if user hits Cancel button' ;  
    exit; 
  } else {  
    echo "<p>Hello { $_SERVER [ 'PHP_AUTH_USER' ]} .</p>" ;  
    echo "<p>You entered { $_SERVER [ 'PHP_AUTH_PW' ]} as your password.</p>" ;  
  }  
?>
例子 34-2. Digest HTTP 认证范例
本例演示怎样实现一个简单的 Digest HTTP 认证脚本,更多信息请参考 RFC 2617.
 代码如下:<?php  
$realm = 'Restricted area' ; 
//user => password  
$users = array( 'admin' => 'mypass' , 'guest' => 'guest' ); 
 
if (!isset( $_SERVER [ 'PHP_AUTH_DIGEST' ])) {  
     header ( 'HTTP/1.1 401 Unauthorized' );  
     header ( 'WWW-Authenticate: Digest realm="' . $realm .  
            '" qop="auth" nonce="' . uniqid (). '" opaque="' . md5 ( $realm ). '"' ); 
    die( 'Text to send if user hits Cancel button' );  
} 
// analize the PHP_AUTH_DIGEST variable  
preg_match ( '/username="(?P<username>.*)",s*realm="(?P<realm>.*)",s*nonce="(?P<nonce>.*)",s*uri="(?P<uri>.*)",s*response="(?P<response>.*)",s*opaque="(?P<opaque>.*)",s*qop=(?P<qop>.*),s*nc=(?P<nc>.*),s*cnonce="(?P<cnonce>.*)"/' , $_SERVER [ 'PHP_AUTH_DIGEST' ], $digest ); 
if (!isset( $users [ $digest [ 'username' ]]))              
新闻热点
疑难解答