Php 如何使用钩子跟踪上一次用户活动?

Php 如何使用钩子跟踪上一次用户活动?,php,yii,Php,Yii,使用Yii-MVC,我想知道用户何时仍在我的网页上,因此我需要存储用户上次活动的时间 是否有一个钩子可以更新用户表中的时间戳字段?您需要使用javascript帮助自己完成这项工作。 在每个页面上放置javascript间隔函数,该函数向特定操作发送ajax请求并更新用户时间戳 总而言之: 页面加载上的Javascript:ajaxUpdateActivity用户ID; Yii action了解您的请求并更新需要更新的内容actionAjaxUpdateActivity您需要通过javascri

使用Yii-MVC,我想知道用户何时仍在我的网页上,因此我需要存储用户上次活动的时间


是否有一个钩子可以更新用户表中的时间戳字段?

您需要使用javascript帮助自己完成这项工作。 在每个页面上放置javascript间隔函数,该函数向特定操作发送ajax请求并更新用户时间戳

总而言之: 页面加载上的Javascript:ajaxUpdateActivity用户ID;
Yii action了解您的请求并更新需要更新的内容actionAjaxUpdateActivity

您需要通过javascript帮助自己完成。 在每个页面上放置javascript间隔函数,该函数向特定操作发送ajax请求并更新用户时间戳

总而言之: 页面加载上的Javascript:ajaxUpdateActivity用户ID;
Yii action了解您的请求并更新需要更新的内容action ajaxupdateactivity

我找到了答案,在components/Controller.php中添加了以下代码

代码使用afterAction钩子,因此每次操作发生时,都会触发更新

    public function keepAlive() {
        if (!Yii::app()->user->isGuest) {
            User::model()->updateByPk(
                    Yii::app()->user->id, array('lastactive' => date('Y-m-d H:i:s')) //CURRENT_TIMESTAMP..this working fine
            );
        }
    }

// Runs after any action in controller
    public function afterAction($action) {
        self::keepAlive();
        parent::afterAction($action);
    }

我找到了答案,在components/Controller.php中添加了以下代码

代码使用afterAction钩子,因此每次操作发生时,都会触发更新

    public function keepAlive() {
        if (!Yii::app()->user->isGuest) {
            User::model()->updateByPk(
                    Yii::app()->user->id, array('lastactive' => date('Y-m-d H:i:s')) //CURRENT_TIMESTAMP..this working fine
            );
        }
    }

// Runs after any action in controller
    public function afterAction($action) {
        self::keepAlive();
        parent::afterAction($action);
    }

是的,没错,你也可以用js来做这件事,但是我找到了正确的答案,用hooksok,很酷。是的,若在用户长时间查看页面时不跟踪用户是可以的,那个么您不需要js。如果他在页面上停留10分钟哇,好久不见了!您在过去10分钟内设置了活动。如果你将来想在他阅读长文章时添加用户活动更新,你需要js。如果你想刷新计时器,从5到5分钟,你应该使用js,如果没有,就使用hooksyes,没错,你也可以使用js,但是我找到了正确的答案,使用hooksok,这很酷。是的,若在用户长时间查看页面时不跟踪用户是可以的,那个么您不需要js。如果他在页面上停留10分钟哇,好久不见了!您在过去10分钟内设置了活动。如果你将来想在阅读长文章时添加用户活动更新,你需要js。如果你想刷新计时器,从5到5分钟,你应该使用js,如果不需要,就使用钩子