我在mysql数据库中有一个“用户”表,在一个字段中,如果用户在线,我会保留信息。
一切都很好:
- 如果某个用户关闭浏览器,他的在线状态不会更改为离线。
我被告知我可以用cron做到这一点,但我对此一无所知。
我可以在他的会话中保存用户ID并使php函数更新数据库。
但是......我不知道如何让cron运行那个php(带有来自会话的id)
它有多容易?
答案 0 :(得分:1)
这很简单。这可能在你的PHP文件中(称之为update.php)。
<?php
/*connect to mysql as per normal*/
// log users off (hopefully, you're using enum here, but for an example...)
mysql_query( 'UPDATE USERS SET STATUS = \'LOGGED_OFF\' '.
// whose last action was more than 14400 seconds ago (4 hours)
'WHERE (CURRENT_TIMESTAMP() - TIMESTAMP(LAST_ACTION)) > 14400' );
?>
然后,打开crontab:
crontab -e
并添加此行以每15分钟运行一次尝试(如果您愿意,可将数字15更改为另一个数字):
* / 15 * * * * /path/to/update.php
答案 1 :(得分:0)
如果您可以在请求时将用户的活动时间戳与当前时间进行比较,为什么要使用cron?
我认为只要用户一段时间没有活动状态,状态就会变为离线状态。所以你必须在db中存储最后一个活动的时间。因此,当您需要响应用户的状态时,请将此时间与当前时间进行比较,如果差异大于允许值,则返回offline
。
答案 2 :(得分:0)
大多数在线系统的检查周期为15分钟。您每次有人做某事时都设置一个时间戳,然后如果他们离线,他们就不会更新他们的时间戳,只是将当前时间戳与数据库中的时间戳进行比较,如果超过15分钟,则删除。