检查用户在线的内容

时间:2011-02-19 20:41:57

标签: php mysql session jquery

我有一个带有用户名的PHP $ _SESSION变量。我有一个MYSQL数据库,其中包含用户名的唯一字段。如何使数据库保持最新的在线用户名称,以及在他们离开时删除它们。有没有办法用JQuery.ajax做到这一点?

4 个答案:

答案 0 :(得分:0)

对于登录用户,您可以轮询对服务器的请求,更新时间戳。在一段固定的时间间隔(例如5分钟)之后,您有一个 cron job ,它会删除时间戳超过5分钟的在线用户表中的记录。

如果用户注销,您可以直接从在线用户表中删除条目。为了更准确,您可以将间隔减少到2分钟。

答案 1 :(得分:0)

确定用户何时上线的最简单方法是在登录期间。您可以在users表中添加一个名为last_loginlast_seen的列,并在用户成功登录时更新该列。

除非用户明确注销,否则很难确定用户是否仍在线。如果您不介意额外的数据库写入,您可以在每次加载页面时更新last_seen列并进行登录检查。然后你必须设置一个合理的时间(15分钟,30分钟?)作为用户可能在那里的时间。

您可以使用ajax和窗口关闭等事件或用户离开页面的其他事件来更新类似last_logout之类的列,但我不会依赖它:

  • 用户可以打开多个窗口/标签
  • 用户可能已禁用javascript
  • 用户可能丢失了互联网连接

答案 2 :(得分:0)

我这样做的方法是使用AJAX定期ping一个特殊的处理程序(30秒内一次)。这是一大堆请求,所以不是每次更新在线用户表而是最后一次访问我都在更新内存缓存。我只在memcache记录后面5分钟时更新数据库记录(你可以根据负载选择更大或更小的延迟)。然后一个cron作业从在线用户表中删除陈旧的记录。

要检查特定用户是否在线,我只需检查他的memcache记录。错误永远不会超过30秒。数据库的使用时间绝不会超过5分钟,因此数据库的结果也非常准确。

我还使用这些定期请求将事件推送给用户。

答案 3 :(得分:0)

最简单的方法是创建MySQL MEMORY表,您应该在每个新请求(每个用户)上添加/更新记录。表的唯一键应该是会话ID,您还应该有timestamp列(在更新/插入时)。如果您需要,可以添加userID列,以防您需要有关用户的一些信息(在您的情况下为用户名) 然后使用cron job删除所有较旧的记录,例如5分钟。您可以更改此值,但每分钟运行一次cron。 为什么内存表?因为它很快(稍微增加内存使用量)所以你不会感觉到差异,如果服务器重启,它会自动清除。