在线或离线功能PHP

时间:2011-08-26 13:08:13

标签: php mysql

我正在研究一个“社区”。当然,我希望能够判断用户是在线还是离线。

我已经创建了这样,当你在我的表UPDATE中的一行登录到1(默认为0)然后它们在线。当他们退出时他们处于离线状态。但如果他们没有按下退出按钮,他们将在线,直到他们按下该按钮。

所以我想创建的是:

  • 在不活动5分钟后,我的数据库中的行应该更新为0.

我正在寻找的是如何以最简单的方式做到这一点。每次加载页面时,我应该创建一个mysql_query,其中UPDATE的行为1。或者还有另一种方法吗?

5 个答案:

答案 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分钟执行一些代码,您就没有选择权。但实际上,我认为以下方法会更有效:

  1. 将您的1/0列更改为timestamp
  2. 在每个用户请求更新timestamp到当前日期时间。
  3. 检查有效用户时,请检查timestamp <{1}}是否距离now不到5分钟
  4. 通过这种方式,您可以获得有关用户的实际数据,而无需重复查询 - 每次请求只需一次更新

答案 3 :(得分:0)

如果您仅在页面加载时更新行,则某些信息将不正确。 让我们假设用户已经打开了页面,并且正在编写非常长的文本或其他内容。他现在正在做半个小时。您的数据库现在已经更新,他被视为离线用户。

如果打开的标签处于活动状态,我会写每隔5分钟ping一次的javascript。 此ping将数据库字段'last_activity'更新为NOW()。要统计在线用户,或检查用户是否在线,您需要将'last_activity'与NOW()相比减去五分钟。

答案 4 :(得分:0)

最简单的方式(恕我直言):

  • 您可以在session_save_path()目录中计算会话数。
  • 您可以在DB中存储上次访问时间戳,并使用(timestamp&gt; current_timestamp - somedelay)计算行数。