Archive for 09月, 2008
PHP如何将Session存储在数据库中(1)
PHP在默认情况下将会话数据写入一个文件并将它放在session.save_path配置选项制定的位置。在创建一个新会话并且分配一个会话ID时,PHP在这个目录中写入一个文件,文件名以sess_开头,以会话ID结束(例如sess_3652e5b3ac02asd44aed25f05v8601c7)。每次在这个会话操作的页面完成执行时,PHP将$_SESSION数组中的数据写入这个文件。下一次启动统一会话时,PHP从这个文件装载数据并且重新安装这个数组。
同时,PHP会定期遍历这些文件(准确的周期可以通过session.gc_probability和session.gc_divisor陪着你选项来控制),寻找过期的会员Session并删除。
以上所介绍的这种机制工作得很好,非常适合中小企业Web应用程序。但是当编写大型Web应用程序并开始跨服务器共享负载时,就会出现一个问题。在这种情况下,属于同一会话的不同请求可能会被发送给不同的服务器。如果会话数据只保存到其中一台服务器的存储文件中,那么就无法从另一台服务器访问它。
一种可能的解决方案是借助于基于网络的文件系统,比如用于Unix的Network File System(NFS)或用于WINDOWS的Microsoft SMB Shares。不幸的是,这两种系统都有不完整的文件锁解决方案,因此在目录和文件的并发访问方面有困难。
更好的解决方案是使用数据库进行存储,因为数据库具有很有的可靠性、并发性和事物处理功能。唯一的问题是,找到一个在PHP中如何使用数据库的方法,而不是使用默认的基于文件的会话存储机制。
SOAP 语法
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息;可选的 Header 元素,包含头部信息;必需的 Body 元素,包含所有的调用和响应信息;可选的 Fault 元素,提供有关在处理此消息所发生错误的信息。
PHP之对象串行化(下)
在会话数据中保存对象的能力确实很强大,替我们节省了很大精力。另外,关于对对象进行串行化有一个要求:在调用session_start之前,必须已经载入类声明。如果不这样做,PHP就不知道这个类的结构,因此无法正确对进行对象的反串行化。
