2012-03-12 114 views
0

我在CakePHP中使用数据库会话,也保存与会话相同的表中的用户ID。是否有可能在用户会话过期时以某种方式检测到,以便我可以更新数据库中的一个字段?cakephp会话超时更新字段

我需要,以防万一用户没有从网站手动注销(只关闭浏览器或甚至没有)我可以从表中删除该会话。

+0

数据库会话会在一段时间后自动清理,就像常规会话一样。这是他们的观点*超时*。你想在这里手动做什么? – deceze 2012-03-13 00:04:08

+0

好,那就是我的想法。我有超时到“1”(在中等安全级别,所以我相信100秒超时)。我已经完成了登录,并且可以在会话数据库中看到记录。我一直在从MySQL管理员那里检查一段时间(超过30分钟),刷新页面并试图用不同位置的相同用户名登录,但该记录尚未删除。在完成数据库表的刷新后,它终于被删除了。 – Albert 2012-03-13 00:20:12

+0

所以我的问题是,会话超时实际上是如何工作的数据库会话?究竟是什么触发了从该表中删除记录的事件?它是否需要访问该网站?或者当会话过期时发生? – Albert 2012-03-13 00:22:23

回答

0

会话数据清理依赖于垃圾回收(gc)。这个垃圾收集过程只有在PHP脚本运行时才会被调用,也就是说,它在清理时不会清理数据,但之后有一段时间另一个PHP脚本正在运行。由于垃圾收集也会占用一些资源,因此它不会每次都运行,但是每次脚本调用都有一定的可能性。 The default is that gc runs about once every 100 script invocations.

所以你不会看到陈旧的数据立即消失。相反,它最终会被清理掉。

+0

好的,这意味着一旦会话过期,会话表中的这些记录将最终被删除,而不必创建一些代码来执行该操作。 – Albert 2012-03-13 00:55:31

+0

是的,完全正确。 – deceze 2012-03-13 00:58:42

+0

很酷,非常感谢你! – Albert 2012-03-13 02:07:01