您的位置:首页 > 其它

session的垃圾回收机制

2013-11-17 21:44 232 查看
彻底删除session

session_unset()则会根据session_id删除内存中的session数组

session_destroy()会删除session文件,以及session_id,但内存中的session还存在

setcookie(session_name(),'',1,'/')则会删除客户端的cookie文件

注意session_destroy一定不能放在最开始,否则会删除session_id,那么session_unset()就失去作用



session.gc_probability = 1

session.gc_divisor = 1000

session.gc_maxlifetime = 1440 //24分钟

session的垃圾回收主要用到上边的三个配置项,当一个session_start()启动时,PHP会根据session.gc_probability/session.gc_divisor的值为几率来启动gc,如果gc启动了,那么它接着会扫描session目录中的所有的session信息,用当前时间减去session的最后修改时间(modified date),同与session.gc_maxlifetime参数进行比较,如果生存时间已经超过gc_maxlifetime,就把该session删除。

注意**

1、由于gc启动有一定的几率,所以会有可能存在已经过了生存周期,但session文件仍存在。

2、如果同一台服务器上跑了多个php应用,例如购买的php服务器上同时跑了n多个网站,站点A的gc_maxlifetime设置为2小时,站点B的 gc_maxlifetime设置为默认的24分钟。当站点B的GC启动时,它会扫描公用的临时文件目录,把所有超过24分钟的session文件全部删除掉,而不管它们来自于站点A或B。这样,站点A的gc_maxlifetime设置就形同虚设了。 所以要解决这种情况,可以设置session.save_path,将session目录设置在自己的网站目录下,这样别人的gc就扫不到自己的目录,只有自己的gc才可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: