我需要扩展php的垃圾收集器,所以当它删除一个旧的会话时,它也应该删除一些数据库条目。我尝试过使用SessionHandlerInterface的实现,但它不起作用。我应该在哪里添加我的代码?是否可能或这些实现与标准的session_destroy调用有关,而不是垃圾收集器销毁?
答案 0 :(得分:1)
函数session_set_save_handler允许您在许多会话事件(打开,关闭,读取,写入,销毁和gc)上附加回调。在您的情况下,destroy
和/或gc
可能会这样做。
答案 1 :(得分:0)
销毁会话。由session_regenerate_id()(使用$ destroy = TRUE),session_destroy()以及session_decode()失败时调用。
因此,只有在脚本期间显式销毁会话或出现错误时,才会调用使用SessionHandlerInterface
定义的销毁函数。
要销毁旧会话,您必须使用gc
的{{1}}参数,并删除session_set_save_handler
的所有条目。
编辑:
请注意,在查询开始时调用datetime < currenttime - $lifetime
的概率只有1%。这意味着它的执行在很大程度上取决于您在服务器上拥有多少流量。当您独自在测试服务器上工作时,您无法轻松执行它。