Php 在线或离线函数

Php 在线或离线函数,php,mysql,Php,Mysql,我在一个“社区”工作。当然,我想知道用户是在线还是离线 我创建了这样一个选项,当您登录我的表中的一行时,它会更新为1(默认值为0),然后它们就联机了。当他们注销时,他们就离线了。但是,如果他们不按下注销按钮,他们将在线,直到他们按下该按钮 所以我想创造的是: 5分钟不活动后,数据库中的行应更新为0 我要找的是如何用最简单的方法做到这一点。我应该做一个mysql_查询,在每次加载页面时将行更新为1。还是有别的办法 不要使用布尔“Online”字段,而是使用DateTime。当用户向页面发出请求

我在一个“社区”工作。当然,我想知道用户是在线还是离线

我创建了这样一个选项,当您登录我的表中的一行时,它会更新为1(默认值为0),然后它们就联机了。当他们注销时,他们就离线了。但是,如果他们不按下注销按钮,他们将在线,直到他们按下该按钮

所以我想创造的是:

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

我要找的是如何用最简单的方法做到这一点。我应该做一个mysql_查询,在每次加载页面时将行更新为1。还是有别的办法

不要使用布尔“Online”字段,而是使用DateTime。当用户向页面发出请求时,将DateTime更新为NOW()。在线收集当前用户列表时,WHERE子句类似于
WHERE lastseed>DATE\u SUB(NOW(),间隔5分钟)

更新:检索个人联机状态


从userid=$userid的表中选择if(lastSeen>date_sub(now(),interval 15 minutes),1,0)作为状态。如果您不想设置cron作业,它将每5分钟执行一次代码,那么您没有选择。但是,事实上,我认为以下方法会更有效率:

  • 将1/0列更改为
    timestamp
  • 在每个用户请求时,将时间戳更新为当前日期时间
  • 检查活动用户时,请检查
    时间戳
    距离
    现在是否少于5分钟

  • 通过这种方式,您将获得关于用户的实际数据,而无需重复查询-每个请求只需一次额外的更新

    本教程非常方便:

    如果只在页面加载时更新行,则某些信息将不正确。 让我们假设用户已经打开了页面,正在写很长的文本或其他东西。他现在正在做半个小时。你的数据库ny现在已经更新了,他被算作离线用户

    如果打开的选项卡处于活动状态,我会编写javascript,每5分钟ping一次。 此ping将数据库字段“上次活动”更新为现在()。要计算在线用户数,或检查用户是否在线,您需要将“上次活动”与现在()减去五分钟进行比较。

    最简单的方法(IMHO):

    • 您可以在session\u save\u path()目录中计算会话数
    • 您可以将上次访问时间戳存储在DB中,并使用(timestamp>current\u timestamp-somedelay)对行进行计数

    您还必须说明有人在同一页面上停留超过5分钟。我建议设置一个Ajax请求,每隔几分钟ping一次服务器。@SimpleCoder我以前从未使用过Ajax。所以我不知道怎么做。但我明白你的意思。在同一页面上停留5分钟的人变成离线状态是不公平的;)最好保存用户活动的记录,例如更新/插入表中的记录,并指定一个用户被视为在线的时间间隔(比如15分钟)。当您想检查用户是否在线时,只需检查他最近的活动记录,看看它是否在15分钟或更短的时间之前。@Kolind:使用jQuery做ajax非常容易,只需执行
    jQuery.ajax('/useralivepage.php?name=abc')
    ,页面就会被调用。在php中填充名称。如果用户去喝咖啡,20分钟后返回,该怎么办?他会断开连接吗?不会。他只会显示为脱机,然后显示为联机。这就是我要找的。那么,我是否需要在每个页面上都有一个mysql_query()来执行此操作?@Riduko OP的请求:
    在5分钟不活动后,我的数据库中的行应该更新为0。
    因此这是正确的行为。优化注意:如果为在线/离线数据创建单独的表,将其设置为内存表javascript必须知道用户是否正在与页面进行交互。否则,如果您只有每5分钟ping一次服务器的javascript,浏览器中打开的页面将继续在线显示您。