查看文章 |
如何提高PHP的会话保持时间
2008-07-03 02:21
php session有一个GC功能,就是Garbage Collector。这个GC启动的时候,会清除那些已经“超时”的session。它的工作原理是这样的(以utblog.com为例):
由此可见,gc_maxlifetime设置为24分钟,对于写某些文章来说还不够。这 是一个原因,另外,session.save_path的缺省路径在linux上是/tmp,很少有程序会修改这个设置。如果这台服务器上有多个虚拟主 机,那么,/tmp目录下会存放许多不同session_name的会话文件。糟糕的是,php的GC不区分会话归属,它会根据它取得的 gc_maxlifetime来清理这个目录下的所有过期session文件。 据以上分析,解决方案是:UTBLOG在.htaccess文件内添加了一条语句,将session.gc_maxlifetime的local value扩大为14400(4小时),同时在后台将session.save_path设置为/tmp/utblog,这样,utblog的会话文件就不受其他网站干扰了,而4小时的失效时间,我想,无论如何应该够用了。 测试下来,一切如我所愿。 另, 如果直接改动/etc/php.ini当然也可以。如果没有权限改动php.ini,也没有权限改动apache的conf文件,.htaccess被禁 止,那么直接修改plog的sessionmanager.class.php文件,在session_start行前添加 ini_alter("session.gc_maxlifetime", 14400)亦可。plog结构良好,只有这一处调用session_start,所以也只有这一处需要修改。我在本地做过测试,可以工作。 |
最近读者: