这几天,我正在努力,我不知道如何创建一个简单的在线& amp;我的用户的离线状态。这就是我所做的:
首先,我在用户表LAST_ACTIVITY (timestamp)
中创建了一个字段
和STATUS (String:Online or Offline)
其次,我写了这段代码(我尝试了很多代码,这是最后一个 一,真的很困惑):
这是我的代码:
$update_status = mysqli_query($connection,"UPDATE users SET STATUS='online',LAST_ACTIVITY=NOW() WHERE Username='{$username_session}'");
$check_status = mysqli_query($connection , "SELECT * FROM users WHERE Username='{$username_session}'");
while($rr = mysqli_fetch_array($check_status))
{
if (date("Y-m-d g:i:s") > $rr['LAST_ACTIVITY'] )
{
$update_status = mysqli_query($connection,"UPDATE users SET STATUS='offline',LAST_ACTIVITY=NOW() WHERE Username='{$username_session}'");
}
}
在此代码if (date("Y-m-d g:i:s") > $rr['LAST_ACTIVITY'] )
处,我尝试在当前时间添加5分钟,然后检查当前时间(比LAST_ACTIVITY TIMESTAMP
多5分钟),然后将STATUS
更新为{{1}我厌倦了加上分钟:
Offline
但是没有工作,我希望你明白我的意思。请帮我解决这个问题,为我解释非常简单明了。
答案 0 :(得分:0)
在这里使用timestamp
会更容易。只需将当前用户的当前时间戳设置为LAST_ACTIVITY
即可。为此,您需要将数据库中的LAST_ACTIVITY
列更改为INT(10)
。
// current timestamp
$now = time();
// update current user
mysqli_query($connection, "
UPDATE users
SET STATUS = 'online', LAST_ACTIVITY = {$now}
WHERE Username = '{$username_session}'");
然后只更新数据库中的所有条目,其中LAST_ACTIVITY
超过5分钟。
// 60 Seconds * 5 = 300
$older = time() - 300;
// set all older entries as offline
mysqli_query($connection, "
UPDATE users
SET STATUS = 'offline'
WHERE LAST_ACTIVITY < {$older}");
重置在线状态的另一种方法是直接在数据库中创建预定事件。但这对于未来的维护和清理来说并不是很好。 cron job
将成为更好的解决方案。
但是,为了完成,这里有一种方法让数据库自己更新它(未经测试的):
CREATE EVENT set_offline
ON SCHEDULE EVERY 1 MINUTE
DO
UPDATE users
SET STATUS = 'offline'
WHERE LAST_ACTIVITY < UNIX_TIMESTAMP() - 300;