PHP Http Basic认证

HTTP RFC2617 里规定的两种标准的认证方式(Baisc,Digest)与常见的SESSION机制不同。HTTP认证是无状态的,在HTTP-HEADER里传输。而SESSION则在服务端要维护,通过客户端发送SESSIONID来标识不同的用户。

 

一个HTTP BASIC认证的例子:

 

<?php
/*
 * To change this template, please replace echo using your implement
 */
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="Hellotianma Login"');
    header('HTTP/1.1 401 Unauthorized');
} else {
    echo "<p>用户名:{$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>密码: {$_SERVER['PHP_AUTH_PW']} </p>";
}
return;
?>

 

当没登录前,PHP会生成一个HTTP的头:

WWW-Authenticate: Basic realm="Hellotianma  Global Login"

 

并且会生成401 Unauthorized的响应码。此时,浏览器会自动弹出登录窗口,要求用户名和密码验证。

 

假设用户名输入hello,密码输入world

 

则登录后,浏览器会保存这个认证,只要浏览器不关闭,每次这个网站的HTTP请求,浏览器都会自动添加一个HTTP已经认证后头:

Authorization: Basic aGVsbG86d29ybGQ=

 

如果是Firefox,可能要清除Active Login才能让浏览器删除保存的认证信息。IE和Chrome关闭就没有了。

 

也可由Ajax或者其它HTTP客户端来生成这个认证信息,此时认证后的头由下面步骤生成:

1. $userInfo = $userName . ':' . $userPassword

2. header('Authorization: ' . 'Basic ' . base64_encode($userInfo))

 

注:PHP用“.”来表示字符串加法,C/C++/C#/Java/JavaScript等用“+”来表示。

 

如果采用SoapClient来调用基于HTTP基本认证的Web服务,可以:

 

$soapClient = new SoapClient($newUrl, array('encoding'=>'utf-8', 'trace' => 1, 'login'=>'%USERNAME%', 'password'=>'%PASSWORD%'));

 

用你的用户名和密码来分别替换%USERNAME%和%PASSWORD%即可实现HTTP基本认证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值