我正在研究一个“社区”。当然,我希望能够判断用户是在线还是离线。
我已经创建了这样,当你在我的表UPDATE中的一行登录到1(默认为0)然后它们在线。当他们退出时他们处于离线状态。但如果他们没有按下退出按钮,他们将在线,直到他们按下该按钮。
所以我想创建的是:
我正在寻找的是如何以最简单的方式做到这一点。每次加载页面时,我应该创建一个mysql_query,其中UPDATE的行为1。或者还有另一种方法吗?
答案 0 :(得分:7)
使用DateTime而不是使用布尔“在线”字段。当用户向页面发出请求时,将DateTime更新为NOW()。当您在线收集当前用户列表时,您的WHERE子句将类似于WHERE lastSeen > DATE_SUB(NOW(), INTERVAL 5 Minutes)
更新:检索个人在线状态。
select if(lastSeen > date_sub(now(), interval 15 minutes), 1, 0) as status from table where userid=$userid
答案 1 :(得分:1)
答案 2 :(得分:0)
好吧,如果您不想设置一个cron作业,那将每5分钟执行一些代码,您就没有选择权。但实际上,我认为以下方法会更有效:
timestamp
timestamp
到当前日期时间。timestamp
<{1}}是否距离now
不到5分钟通过这种方式,您可以获得有关用户的实际数据,而无需重复查询 - 每次请求只需一次更新
答案 3 :(得分:0)
如果您仅在页面加载时更新行,则某些信息将不正确。 让我们假设用户已经打开了页面,并且正在编写非常长的文本或其他内容。他现在正在做半个小时。您的数据库现在已经更新,他被视为离线用户。
如果打开的标签处于活动状态,我会写每隔5分钟ping一次的javascript。 此ping将数据库字段'last_activity'更新为NOW()。要统计在线用户,或检查用户是否在线,您需要将'last_activity'与NOW()相比减去五分钟。
答案 4 :(得分:0)
最简单的方式(恕我直言):