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