会话中的垃圾收集将发生在PHP中与数据库管理会话时?

时间:2010-06-02 11:48:34

标签: php session garbage-collection

如果会话在php中与数据库进行管理时会如何或何时进行垃圾回收?我用数据库完成了会话管理。但它并没有删除完成到期时间的用户详细信息。

2 个答案:

答案 0 :(得分:5)

  

它不会删除完成到期时间的用户详细信息。

人们似乎总是对此感到困惑。

每当调用session_start()时,就会根据掷骰子触发垃圾收集。因此,如果所有客户突然停止同时访问您的网络服务器,垃圾收集将永远不会启动,会话数据将无限期地持续存在。

但是,如果先前在TTL过期之前访问过会话,则会话处理程序只负责返回会话数据。因此,每次保存会话时,即使数据未更改,处理程序也必须更新会话数据文件/记录的时间戳。

如果在TTL过期后处理程序返回会话数据,则会话处理程序中存在错误。

但是,您只是声明会话过期后数据存在 - 这是完全正常的。

OTOH如果您只是想减少存储大量过期会话的开销,那么您可以通过增加gc_probability或减少gc_divisor来更频繁地强制垃圾收集。但是,您正在将更多的处理工作推送到请求处理程序中。

下进行。

答案 1 :(得分:0)

您必须注册gc处理程序作为调用session_set_save_handler()函数的一部分,该函数将负责删除过期的会话。

此外,请确保配置ini设置session.gc_probability, session.gc_divisor and session.gc_maxlifetime以满足您的垃圾回收需求。