PHP5跨服务器使用session时保存方式的变化

因为公司的一个小项目,需要在跨服务器环境下使用session。默认配置,session是以文件形式保存在服务器端,所以无法跨服务器使用。当然,PHP也提供了跨服务器的解决方案:session_set_save_handler()。考虑到效率,决定不使用通常将session存在数据库中的方法,改用memcache来保存session。

在PHP手册中,关于session_set_save_handler()有一个警告

As of PHP 5.0.5 the write and close handlers are called after object destruction and therefore cannot use objects or throw exceptions. The object destructors can however use sessions.It is possible to call session_write_close() from the destructor to solve this chicken and egg problem.

意思是而从PHP5.0.5开始,write和close处理函数的调用,是在所有对象被destruct之后的,这样就无法在这两个方法中使用对象和错误捕获了。从php5.0.5开始,在定制session保存方式时,就必须得用到session_write_close()了。

简单写了个使用memcache保存session数据的类,改成其他方式保存也是很简单的事。不过如果存在数据库中,是需要对数据进行一些处理的。memSession.rar

在这里顺便提一下PHP.net网站上的手册。跟下载到本地的chm不同,网站的手册,每个函数说明页面的下面,基本都有一大堆的note。这些note,都是大家在使用这个函数时遇到问题后的解决方法,或者是更深一层应用的扩展。其中的亮点很多,有时候都晃眼。比如在这个session_set_save_handler函数下面的notes中,就有使用NFS,Mysql,LDAP等保存session的代码。在php.net上查手册,有时候看notes比看函数说明更能让人明白函数的用法。所以,玩PHP,对于自己陌生的函数,只要能上网,严重推荐上php.net查手册。

行了,广告做完,洗洗睡了。

发表评论

邮箱地址不会被公开。 必填项已用*标注