第 30 章 Zend_Session

目录

30.1. 简介
30.2. 基本用法
30.2.1. 教程实例
30.2.2. 迭代会话命名空间
30.2.3. 会话命名空间的访问器
30.3. 高级用法
30.3.1. 开启会话
30.3.2. 锁住会话命名空间
30.3.3. 会话封装和控制器
30.3.4. 限制每个命名空间的Zend_Session_Namespace实例
30.3.5. 操作命名空间下的数组
30.3.6. 在身份验证中使用会话
30.3.7. 在单元测试中使用会话
30.4. 全局会话管
30.4.1. Zend_Session::setOptions()
30.4.2. 选项
30.4.3. regenerateId()
30.4.4. rememberMe(integer $seconds)
30.4.5. forgetMe()
30.4.6. sessionExists()
30.4.7. destroy(bool $remove_cookie = true, bool $readonly = true)
30.4.8. stop()
30.4.9. writeClose($readonly = true)
30.4.10. expireSessionCookie()
30.4.11. setSaveHandler(Zend_Session_SaveHandler_Interface $interface)
30.4.12. namespaceIsset($namespace, $name = null)
30.4.13. namespaceUnset($namespace, $name = null)
30.4.14. namespaceGet($namespace, $name = null)
30.4.15. getIterator()
30.5. 原理

30.1. 简介

参见最新发布的文档。Zend Framework Auth团队也非常期望在我们的邮件列表中(fw-auth@lists.zend.com)发表你的反馈和捐赠。

在基于PHP开发的Web应用程序中,会话(session)表现了服务器端(持久的状态数据)和特定的用户代理(user agent)客户端(比如web浏览器)之间的一对一的关系。Zend_Session用来在由相同客户端发起的多个页面请求之间,管理和保护会话数据(在逻辑上,会话数据是cookie数据的扩展)。不像cookie数据,会话数据不储存在客户端,且仅当服务器端程序源代码使得会话数据可用,才通过回应来自客户端的请求与客户端共享会话数据。这个组件及其文档的目的是,使用Zend_Session组件来管理被称之为服务器端数据的会话数据,个别会话数据被Zend_Session_Namespace访问器对象操作。会话命名空间(Session Namespaces)提供了使用经典的命名空间方式来访问会话数据,命名空间逻辑上就是一系列被命名(键名为字符串)的联合数组(类似于普通的PHP数组)。

Zend_Session_Namespace创建$_SESSION[]中命名空间的访问器对象实例。Zend_Session组件包装了PHP内置的会话模块,提供了一个管理会话的接口,也为Zend_Session_Namespace持久化命名空间数据提供了API。Zend_Session_Namespace为会话命名空间数据到PHP内部会话机制的持久化提供了一个标准的、面向对象的接口。Zend_Session支持现有无名的会话,同时也支持“登录会话”。ZF的用户验证组件Zend_Auth,使用了Zend_Session_Namespace,把用户的鉴别信息储存到了"Zend_Auth"命名空间下。因为Zend_Session使用了PHP内置的会话函数,常用的配置选项和设置都仍然适用(请参考http://www.php.net/session)。如此,储存在cookie或者URL中的会话标识,保持了客户端与服务器端会话状态数据之间的联系。

PHP默认的session_save_handler函数没有解决当客户端连接到了集群服务器中的一些服务器的情况下,保持客户端与服务器端会话状态数据之间联系的问题,因为会话状态数据只能储存在本地服务器当中(译注:也就是在各服务器间不能共享session数据)。当一组附加的且合理的save handlers可用时,我们会提供它。我们鼓励社区成员在我们的邮件列表fw-auth@lists.zend.com中发表你的建议或者提交save handlers。与Zend_Db兼容的save handler已经发表在邮件列表中。