我将简要解释一下我的目标。
两个人在网页上建立了PHP会话。一个人离开页面,另一个人仍然在场。 60秒后,离开的人需要终止整个会话(如超时)。
我一直在做的是让所有登录页面的人都通过AJAX请求充当ping计时器,并且ping计时器等待,直到断开连接的人的最后一次ping超过60秒。然后它可以消除与注销人员相关联的数据文件,但是我无法弄清楚如何在没有先将当前会话切换到要删除的会话,删除它,然后以某种方式切换回来的情况下删除整个会话。 / p>
有没有办法实现这个目标?或者是一种比一系列AJAX请求更高效,带宽更少的替代方案?
答案 0 :(得分:2)
除非你有数百万用户留下陈旧的会话文件,否则不要为此烦恼。
如果你需要60秒的时间,那么将PHP的会话max_lifetime设置为60秒,并将会话垃圾收集器设置为相当频繁地运行。
ini_set('session.gc_maxlifetime', 60); // 60 second lifetime
ini_set('session.gc_probability', 1);
ini_set('session_gc.divisor', 100); // garbage collector has 1% chance of running
这样,收集器将自动在大约1%(1/100)的传入命中中运行,它将删除任何至少60秒内未使用的会话文件。
答案 1 :(得分:1)
据我所知,当你离开网站时,你的会话会被垃圾收集器自动销毁,所以这似乎是你不应该担心的事情。