作业帮 > PHP > 教育资讯

使用 Zend_Auth 和 Zend_Db 实现用户认证[1]

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/13 15:20:44 PHP
使用 Zend_Auth 和 Zend_Db 实现用户认证[1]
使用 Zend_Auth 和 Zend_Db 实现用户认证[1]PHP
【BK网络学院 - PHP】
本教程将讲述如何使用Zend Framework(ZF)中的Zend_Auth 和 Zend_Db来实现用户的认证操作。
首先先来看看 ZF 手册对 Zend_Auth 组件的简介:

Zend_Auth 为认证(authentication)和一些通用用例情景的具体认证适配器提供了一个API。

Zend_Auth 只涉及 认证而不是授权。认证被宽松地定义为基于一些证书(credential)来确定一个实体(例如,身份)是否确实是它所声称的。授权是一个过程,它决定是否允许一个实体对其他实体进行访问、执行操作,它超出了Zend_Auth的范围。更多关于Zend Framework 授权和访问控制的信息,参见 Zend_Acl.

Note: Zend_Auth 类通过它的 getInstance()方法实现 Singleton 模式 - 只有一个实例可用。这意味着使用 new 操作符和 clone 关键字将不能在Zend_Auth 类中工作,而要使用 Zend_Auth::getInstance() 来代替。

1,数据库表信息

在我们的 MySQL 里新建一个 PHPweb20 数据库及 users 表,作为测试,建表的 SQL 语句如下所示:

view source

print?

CREATE TABLE 'users' (

'user_id' bigint(20) unsigned NOT NULL auto_increment,

'username' varchar(255) NOT NULL,

'password' varchar(32) NOT NULL,

'user_type' varchar(20) NOT NULL,

'ts_created' datetime NOT NULL,

'ts_last_login' datetime default NULL,

PRIMARY KEY ('user_id'),

UNIQUE KEY 'user_id' ('user_id'),

UNIQUE KEY 'username' ('username')

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk

主键为 user_id 字段。

2,Zend_Auth 如何工作

首先我们要理解 Zend_Auth 所使用的术语,标识一个用户的唯一信息称为其"身份",用户成功地认证以后,将其身份存储在一个 PHP 会话之中,从而在以后的页面中能够标识这些用户。(关于这里的 PHP 会话,Zend_Auth 为此提供了一个 Zend_Auth_Storage_Session 类,而这个类又进一步使用了 Zend_Session 组件,这实际上是 PHP 的 $_SESSION 变量的一个包装器,而且提供了更强大的功能)

要认证一个用户,用户必须提供一个凭证,在我们的例子当中,使用 users 表中的 password 作为用户的凭证,我们将使用一个适配器根据数据库来检查给定的用户的身份和凭证。这个适配器是 Zend_Auth_Adapter_DbTable 适配器,这个适配器设计为使用 Zend_Db 组件,如果要是想编写自己的适配器,只需实现一个方法:authenticate() 方法,该方法要返回一个 Zend_Auth_Result 对象。这个对象包含着认证是否成功的有关信息,还包含一些诊断信息。

3,实例化 Zend_Auth

Zend_Auth 是一个单例类,使用静态的 getInstance() 方法来获取这个实例,然后必须使用 setStorage() 方法设置存储类(要注意,我们使用的是 PHP 的会话):

以下代码用于建立 Zend_Auth 实例:

view source

print?

$auth = Zend_Auth::getInstance();

$auth -> setStorage(new Zend_Auth_Storage_Session());

4,如何完成认证

来说一些具体的关于 Zend_Auth_Adapter_DbTable 的东西:

我们将使用 Zend_Auth_Adapter_DbTable 认PHP