ModX Revo:获取当前的Webuser或Manager会话

时间:2015-01-07 12:48:50

标签: session counter modx

如何获取所有已记录的webuser(或管理器,但不是所有类型)的编号。是否可以使用ModX API?或者是否有必要检查数据库表modx_session - 但是"数据"列可读?

我想要显示一个在线用户计数器(例如在论坛中)。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我会尽力解决。解决方案:

编写一个跟踪事件并将其保存在数据库或其他地方的插件:OnWebLogin和OnWebLogout。然后读取登录用户的数量。

创建了一个db表“modx_weblogin_session”(手动)userid,timestamp。

创建了一个插件:

if (isset($modx) && isset($user)) {
$eventName = $modx->event->name;
$isBackend = ($modx->context->key == 'mgr') ? true : false;

$errorMsg = '';

$userId = $user->get('id');
$output = 'WebLoginCountSession-Plugin: ' . $eventName . ' user-id: ' . $userId;

$logout = function ($userId) {
    global $modx;
    //Custom Mysqli Class
    if (MySQLiDB::isConnected()) {
        $mysqli = MySQLiDB::getConnection();
        if ($mysqli instanceof mysqli) {
            try {
                $sql = "DELETE FROM `modx_weblogin_session` WHERE userid = ?";
                $prep_state = $mysqli->prepare($sql);
                $prep_state->bind_param('i', $userId);
                $prep_state->execute();
            } catch (Exception $e) {
            //$modx->log(modX::LOG_LEVEL_ERROR, ...)
            }
        }
    }
};

$login = function ($userId) {
    global $modx;
    if (MySQLiDB::isConnected()) {
        $mysqli = MySQLiDB::getConnection();
        if ($mysqli instanceof mysqli) {
            try {
                $sql = "REPLACE INTO `modx_weblogin_session` (`userid`) VALUES (?)";
                $prep_state = $mysqli->prepare($sql);
                $prep_state->bind_param('i', $userId);
                $prep_state->execute();
            } catch (Exception $e) {
             //$modx->log(modX::LOG_LEVEL_ERROR, ...)
            }
        }
    }
};

if (!$isBackend && !empty($userId)) {
    switch ($eventName) {
        case ('OnWebLogin'):
            $output .= ' - login';
            $login($userId);
            break;
        case ('OnWebLogout'):
            $output .= ' - logout';
            $logout($userId);
            break;
    }
}

if ($debug === true) {
    return $output . ' ' . $errorMsg;
}

}