2017-02-05 8 views
0

У меня есть чат, и я хочу показать, сколько людей в сети именно в этом чате в данный момент. Пользователь может присоединиться к комнате с регистрацией или без нее.Как привлечь активных посетителей в этот момент на этой странице?

+0

Как пользователям, зарегистрированные в чате? – chris85

+0

Например, подсчет уникальных IP-адресов или подсчет активных сеансов – Nils

+0

@Nils IP-адреса не являются людьми и не могут надежно подсчитывать/идентифицировать людей. – chris85

ответ

1

Это сильно зависит от того, как вы реализуете чат-комнату. Вы можете назначить идентификатор чата и тайм-аута каждому посетителю, который со временем истекает и удаляется из списка. Этот список будет содержать информацию о посетителях, включая счет.

-1

Перечислите все активные сессии в текущем сайте:

<?php 
    print_r(scandir(session_save_path())); 
?> 
+0

это будет для сайта не для чата. –

1

Только быстрая мысль, что пришло мне в голову (может быть в значительной степени настроены и улучшенные):

1) вызова РНР скрипт периодически (например, один раз в минуту) через вызов AJAX с уникальным идентификатором для каждого пользователя. Как это, например:

var visitorCounter = function() { 
    $.get('audience_checker.php', { 
     id: get_random_id() // inspiration below 
    }); 
} 

setInterval(visitorCounter, 60000); // it gets called every 60000 ms = 1 minute 

Возьмите вдохновение how to build a random ID generation here. Или используйте IP-адрес.

2) Теперь напишите PHP-скрипт, который будет хранить идентификаторы из супер-глобальной переменной $ _GET в базе данных с отметкой времени. Если идентификатор уже существует, просто обновите метку времени.

3) И, наконец, еще один сценарий statistics.php может просто выбрать те данные из базы данных, которые не старше, чем за минуту баз на метку времени.

1

Конечно, это будет зависеть от вашей логики приложения чата, но это то, что я использую, чтобы подсчитывать пользователей в моем приложении. Это не идеально, потому что вы никогда не знаете о своих пользователях, если они не выходят из системы. Вы можете добавить новую таблицу для обработки сессий:

`id`, `expire`, `data`, `user_id`, `last_write` 

затем изменить конфигурацию, чтобы сохранить сессии в эту таблицу вместо файлов.

 'session' => [ 
     'class' => 'yii\web\DbSession', 
     'writeCallback' => function ($session) { 
      return [ 
       'user_id' => Yii::$app->user->id, 
       'last_write' => time(), 
      ]; 
     }, 
    ], 

, то вы можете проверить сессии в течение последних 5 минут, например

Надеются, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^