Онлайн пользователи PHP YII2

175
05 октября 2018, 16:00

есть задача считать онлайн пользователей на сайте , как я вижу самое оптимальное решение считать пользователей по сессиям , ребята подскажите где в Yii2 можно создать сессии и после все их посчитать ? или может еще будут какие-то идем считать пользователей онлайн без БД

Answer 1

может кому пригодится или кто поможет оптимизировать , разделил на два этапа первым записую файл а вторим считаю , ниже код

public static $nameFile = 'base_sessions.dat';
/**
 * Записуем онлайн пользователей в файл
 */
public static function setUsers()
{
    if(Yii::$app->session->get('online') !== null){
        return true;
    }
    Yii::$app->session->set('online', '1');
    $base = __DIR__.'/../../frontend/web/online/'.static::$nameFile; //файл, в котором храним идентификаторы и время
    if (!file_exists($base)) {
        if (!file_exists(__DIR__.'/../../frontend/web/online/')) {
            mkdir(__DIR__ . '/../../frontend/web/online/', 755);
        }
        touch($base);
    }
    $LastTime = time() - 300; //через какое время сессии удаляются (время в секундах)
    $file = file($base);
    $id = session_id(); //выделяем уникальный идентификатор сессии
    if ($id != '') {
        $ResFile = array();
        foreach($file as $line) {
            list($sid, $utime) = explode('|', $line);
            if ($utime > $LastTime) {
                $ResFile[$sid] = trim($sid.'|'.$utime).PHP_EOL;
            }
        }
        $ResFile[$id] = trim($id).'|'.time().PHP_EOL;
        file_put_contents($base, $ResFile, LOCK_EX);
    }
    return true;
}

/**
 * @return int|mixed
 * Считаем онлайн пользователя из файла
 */
public static function CountUser()
{
    if (!$countOnline = Yii::$app->cache->get('online_count_user')){
        $dirFile = __DIR__.'/../../frontend/web/online/'.static::$nameFile;
        if (!file_exists($dirFile)) {
            return 0;
        }
        Yii::$app->cache->set('online_count_user', $countOnline = count(file($dirFile)),60 );
    }
    return $countOnline;
}
READ ALSO
Нужно,используя python,отправить данные на сайт и сохранить их в базу данных

Нужно,используя python,отправить данные на сайт и сохранить их в базу данных

Необходимо заполнить форму на сайтеЗатем полученные данные записать в таблицу в базу данных

153
Развертывание проекта на CakePHP

Развертывание проекта на CakePHP

При развертывании проекта на CakePHP в XAMPP столкнулся с такой проблемой:

198
Как получить данные без oAuth 2

Как получить данные без oAuth 2

Хочу получить данные из Google Analytics с определенного аккаунтаДля того чтобы получить информацию по аккаунту нужно пройти oAuth2 авторизацию и разрешить...

164
Меню на PHP и MySQL

Меню на PHP и MySQL

Подскажите, как сделать так, чтобы меню отображалось в select /select

193