cron - 如果会话过期则更新数据库

时间:2011-07-15 14:56:35

标签: php mysql cron

我在mysql数据库中有一个“用户”表,在一个字段中,如果用户在线,我会保留信息。

一切都很好:

- 如果某个用户关闭浏览器,他的在线状态不会更改为离线。

我被告知我可以用cron做到这一点,但我对此一无所知。

我可以在他的会话中保存用户ID并使php函数更新数据库。

但是......我不知道如何让cron运行那个php(带有来自会话的id)

它有多容易?

3 个答案:

答案 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分钟,则删除。