### PHP4 中的 SESSION 管理

PHP4 的新特性中最引人注目就是对 SESSION 的管理功能.当别人访问你的站点时,你可以把变量保存到 SESSION 对象中,从而实现许多新的功能.
什么是 SESSION
如果你还不太清楚,先我来解释一下什么是 SESSION.一个 SESSION 在别人访问你的网站是开始,在他离开网站是结束.当然你也可以在程序里终止它.基本上,COOKIE 与浏览器联系在一起的,一些服务器上的资源用来保存 SESSION 的变量.默认情况下,PHP4 用文件来保存这些变量.当然,从理论上来讲,也可以用数据库或共享的内存来保存.
所有使用 PHP4 的 SESSION 特性的网页都必须调用 session_start()函数,让 PHP4 引擎装入与 SESSION 相关的信息 到内存中.session_start 函数会尝试从 COOKIE 或当前 HTTP 的请求的参数中寻找 SESSION 的 ID.如果没找到，就会建立一个新的 SESSION 对象.
什么是 SESSION 变量
SESSION 的变量其实就是一个普通的全局变量.当以 SESSION 变量的方式注册(声明)时,所有使用 PHP4 的 SESSION 功能的网页都可以访问它的值.要把一个变量注册为 SESSION 变量,只要先给这个变量赋值,然后调用 session_register("变量名").在后续的使用 SESSION 功能(通过 session_start)的网页中,"变量名"这个变量在无须重新注册为 SESSION 变量,它就象一个普通的变量,而它的值就是前面赋给它的.在程序中改变这个变量的值,它会自动重新注册和保存,且在它后续的网页中可以正常使用.
那么,它能做什么呢?
问得好!有很多办法可以使用 SESSION 管理和 SESSION 变量.这里,我举一个例子来说明.假如你正在建立一个虚拟社区的站点,你可能要跟踪当前经过论证的用户名以及他有多少新的消息等信息.为了降低数据库的负载,你要用其他办法来保存这些信息.有两种办法:
使用三个 COOKIE
authenticatied_user - 当前经过论证的用户名
num_message - 他有多少新的消息
expire_time - COOKIE 的过期时限
使用 SESSION,注册三个 SESSION 变量
第一个方法有很大的安全隐患,别人可以伪造 COOKIE,然后用另一个帐号去访问系统.再说,所有的信息都通过 HEADER()函数实现,比较麻烦.另外,当用户的浏览器拒绝接受其中的一个 COOKIE 是,整个数据就不完整了.
用 SESSION,只要一个 COOKIE,就能保存所有的信息.安全性也好一点.
不足之处
使用任何服务器端的脚本语言,SESSION 都可以提供一个非常自由,灵活和强大的功能.但在 PHP4 中的 SESSION 有一些限制: -不能把对象(Objects)本身保存在 SESSION 里 -保存在 SESSION 里的数据的效率不是很高,因为 PHP4 用文件来保存 SESSION 的信息.