Session 会话超时时的cakephp更新字段

Session 会话超时时的cakephp更新字段,session,cakephp,session-timeout,Session,Cakephp,Session Timeout,我在CakePHP中使用数据库会话,并将用户id保存在与会话相同的表中。是否有可能检测到用户会话何时过期,以便我可以更新数据库中的一个字段 我需要它,以防用户不从网站手动注销(只需关闭浏览器或甚至不关闭浏览器),我可以从表中删除该会话。会话数据清理依赖于垃圾收集(gc)。此垃圾收集过程仅在PHP脚本运行时调用,也就是说,它没有在可以清理数据时正确清理数据,而是在另一个PHP脚本运行后的一段时间内调用。由于垃圾收集也会占用一些资源,所以它不会每次都运行,但每次脚本调用都有一定的可能性 因此,您不会

我在CakePHP中使用数据库会话,并将用户id保存在与会话相同的表中。是否有可能检测到用户会话何时过期,以便我可以更新数据库中的一个字段


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

会话数据清理依赖于垃圾收集(gc)。此垃圾收集过程仅在PHP脚本运行时调用,也就是说,它没有在可以清理数据时正确清理数据,而是在另一个PHP脚本运行后的一段时间内调用。由于垃圾收集也会占用一些资源,所以它不会每次都运行,但每次脚本调用都有一定的可能性


因此,您不会看到过时的数据立即消失。相反,它最终会被清除。

数据库会话会在一段时间后自动清除,就像常规会话一样。这就是他们超时的原因。你到底想在这里手动做什么?嗯,我就是这么想的。我将超时设置为“1”(中等安全级别,所以我相信是100秒超时)。我已经登录,可以在会话数据库中看到记录。我已经从MySQL管理员那里检查了一段时间(超过30分钟),刷新了页面,并尝试从不同的位置使用相同的用户名登录,但该记录没有被删除。在我刷新数据库表之后,它终于被删除了。所以我的问题是,会话超时对于数据库会话实际上是如何工作的?究竟是什么触发了从该表中删除记录的事件?它需要访问该网站吗?或者它只是在会话过期时发生?好的,这意味着一旦会话过期,会话表中的记录最终将被删除,而无需我创建一些代码来完成这项工作。我已经做了另一个测试,会话超时设置为14(总共1400秒)。我已经登录,检查了会话表,我的会话就在那里。我已经离开电脑一个多小时了,并且检查了会话表,而相同的会话仍然在那里。会话已过期,因为当我尝试转到另一个页面时,系统会提示我登录(它应该登录)。此时,我检查了表,然后旧会话的记录就消失了。以前不应该这样做吗?同样,垃圾收集只会每隔一段时间运行一次,并且只在一个PHP脚本运行时运行。如果没有使用PHP脚本的会话运行,垃圾收集将不会运行。即使如此,每运行100个脚本中只有1个调用垃圾收集。它最终会被清除,无法保证它确切发生的时间,也无法保证它会在任何接近实时的地方发生。垃圾收集是一个在计算中经常使用的概念,它总是一个低优先级、没有特定时间保证的过程。好吧,我明白,我问这个问题是因为我遇到了一些奇怪的行为。当用户登录时,我将其id与会话id和数据一起保存在同一个会话表中。但在此之前,我检查他的用户名是否当前未登录(查看该表)。如果他的用户名在该表中,我会拒绝登录,以避免多个用户同时使用一个帐户。为了让这对用户公平地工作,从表中删除过期的会话是很重要的,这并不像我想的那样发生……为什么你拒绝多次登录?这在网站上通常不有用。为什么我不能打开另一个浏览器并同时从两个浏览器登录?如果我关闭浏览器,会话cookie被删除,然后立即重新打开浏览器并再次尝试登录,该怎么办?会话在服务器上仍然有效,但我无法再访问它,必须等待它超时,然后才能再次登录。你想用这个解决什么问题?