通过HTTP跟踪用户存在(onine/offline)最大的问题是如何确定用户何时离线。
很容易确定用户何时联机 - 只有经过身份验证的请求才会假定用户处于活动状态。但是,由于HTTP是无状态的,因此缺少后续请求可能意味着用户已脱机,或者用户在线,但最近没有做任何特定于您的应用的操作。
因此,您可以做出的最佳猜测是超时,并且如果用户在该超时期间未提出请求,则切换到脱机状态。正如Jonathan Sampson所建议的那样,最简单的实现方法是使用lastTimeActive。但是,这不会给你用户会话的长度,只是此时谁在线的近似值。
更复杂的方法是使用lastTimeActive和lastTimeLoggedIn。 LastTimeLoggedIn在第一次验证请求时设置,与前一个验证请求相距超过5分钟。如果在过去五分钟内有认证请求,则认为用户在线。用户的会话长度是lastTimeActive和lastTimeLoggedIn之间的时间差。
如果您的应用程序还提供了向用户注销的选择,则您可以考虑将该操作也视为脱机。但是,除非您的应用程序是银行应用程序,否则用户可能会关闭浏览器。
此外,避免任何后台线程更新您的用户的脱机/在线状态。你应该在运行上述逻辑,只有当有关于特定用户的状态的明确要求,你应该只更新您将被询问用户。
哦,不...这太可怕了......这会杀了你的服务器...... – Faruz 2009-12-15 06:42:24
我保持超过1000.000用户的一个门户。但是一次只有100个在线用户(不到1%)。选择/更新/删除新表比查询用户表更好。 – 2009-12-15 06:45:32