【发布时间】:2014-05-09 11:07:40
【问题描述】:
我需要扩展 php 的垃圾收集器,因此当它删除旧会话时,它还应该删除一些数据库条目。我尝试过使用 SessionHandlerInterface 的实现,但它不起作用。我应该在哪里添加我的代码?是否有可能或这些实现与标准 session_destroy 调用有关,而不是垃圾收集器销毁?
【问题讨论】:
我需要扩展 php 的垃圾收集器,因此当它删除旧会话时,它还应该删除一些数据库条目。我尝试过使用 SessionHandlerInterface 的实现,但它不起作用。我应该在哪里添加我的代码?是否有可能或这些实现与标准 session_destroy 调用有关,而不是垃圾收集器销毁?
【问题讨论】:
session_set_save_handler 函数允许您在许多会话事件(打开、关闭、读取、写入、销毁和 gc)上附加回调。在您的情况下,destroy 和/或 gc 可能会这样做。
【讨论】:
gc方法的例子:here
销毁会话。由 session_regenerate_id()($destroy = TRUE)、session_destroy() 和 session_decode() 失败时调用。
因此,使用SessionHandlerInterface 定义的销毁函数只会在脚本期间显式销毁会话或出现错误时调用。
要销毁旧会话,您必须使用session_set_save_handler 的gc 参数并删除所有带有datetime < currenttime - $lifetime 的条目。
编辑:
请注意,在查询开始时调用gc 的概率只有 1%。这意味着它的执行高度取决于您的服务器上有多少流量。当你一个人在测试服务器上工作时,你不能轻易地执行它。
【讨论】: