`

Zend_Auth结合Zend_Auth_Storage_Session实现session的持久身份认证

    博客分类:
  • php
 
阅读更多

Zend_Auth结合Zend_Auth_Storage_Session实现session的持久身份认证,主要有一下几点:

1、先做个适配器,也就是自己用来验证用户的类,如:

class AuthAdapter implements Zend_Auth_Adapter_Interface{
var $username;
var $password;
/**
* Sets username andpassword for authentication
* @return void
*/
public function __construct($username='', $password=''){//
$this->username = $username;
$this->password = $password;
}
/**
* Performs an authentication attempt
* @throws Zend_Auth_Adapter_Exception If authentication cannot be performed
* @return Zend_Auth_Result
* Zend_Auth_Result::SUCCESS
* Zend_Auth_Result::FAILURE
* Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND
* Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS
* Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID
* Zend_Auth_Result::FAILURE_UNCATEGORIZED
*/
public function authenticate(){
$aryInfo;
if (isset($this->username) && (isset($this->password))){
$aryInfo[0] = _e('验证正确');
return new Zend_Auth_Result(1,$aryInfo);
}else{
$aryInfo[0] = _e('验证失败');
return new Zend_Auth_Result(-1,$aryInfo);
}
}
}

2、在获取一个Zend_Auth的实例

$auth = Zend_Auth::getInstance();3、创建认证session的命名空间,并放到Zend_Auth的实例的存储器中$auth->setStorage(new Zend_Auth_Storage_Session('someNamespace'));4、加入上面的认证适配器实例:include ('../classes/authadapter.class.php');
$authAdapter = new AuthAdapter('usrname', 'pwd');
$result = $this->_auth->authenticate($authAdapter);

5、判断验证结果:

if (!$result->isValid()) {
foreach ($result->getMessages() as $message){
echo "$message\n";
}
}else{

foreach ($result->getIdentity() as $message){
echo "$message\n";
}
}

如果在其他页面去验证的时候直接调用一个方法就可以验证了:

$auth = Zend_Auth::getInstance();
$auth->setStorage(new Zend_Auth_Storage_Session('sessionAuth'));
if ($auth->hasIdentity()){
$identity = $auth->getIdentity();
echo '认证';
}else{
echo '未认证';
foreach ($auth->getIdentity() as $message){
echo "$message\n";
}

其实按照我的理解,采用什么样的方式去验证,只要在适配器验证方法中去决定就可以了...

对于身份持久,最好与ACL配合好使用才好...否则对于权限和资源的访问控制还是会有很多问题...

还有一个重要的问题,从根本上来讲,无论那种验证方式,还都是和session有很大关系的,除非在每次验证的时候都去调用验证的原始方法,而不是只根据验证session中取出来的值,当然,session中的值会作为验证信息的依据。

转自:http://hi.baidu.com/garrych/blog/item/6083c423e2889e42ad34ded4.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics