我有一个PHP $_SESSION变量,其中包含用户的名称。我有一个MYSQL数据库,其中有一个唯一的字段用于用户的名称。如何使数据库与在线用户的名称保持同步,并在他们离开时将其删除。是否可以使用JQuery.ajax来实现?
确定用户何时上线的最简单方法是在登录期间。您可以向用户表添加一个名为last_login
或last_seen
的列,并在用户成功登录时更新该列。
除非用户明确注销,否则很难确定用户是否仍然在线。如果您不介意额外的数据库写入,您可以在每次页面加载和登录检查时更新last_seen
列。然后,您必须设置合理的时间(15分钟、30分钟?)作为用户仍可能存在的时间。
您可以使用ajax和事件,如窗口关闭或其他用户离开页面的事件来更新一个列,例如last_logout
,但我不会依赖它,因为:
最简单的方法是创建MySQL MEMORY表,在每个新请求(对于每个用户)中添加/更新记录。 表的唯一键应该是会话ID,并且您还应该有时间戳列(在更新/插入时)。如果需要某些关于用户的信息(例如用户名),则可以添加userID列。 然后使用cron作业删除所有早于5分钟的记录。 当然,您可以更改此值,但每分钟运行cron即可。 为什么使用内存表? 因为它速度快(略微增加内存使用),因此您不会感到任何区别,并且在服务器重新启动时自动清除。