кто онлайн? логика счетчика

guru85

Постоялец
Регистрация
24 Мар 2010
Сообщения
100
Реакции
4
Здравствуйте, делаю вебинарную комнату, мне необходимо видеть количество людей кто онлайн. Много примеров основаны на логике перезагрузки страницы, если пользователь не перезагружал 10 минут значит его уже нет на странице, естественно такой вариант не подходит.
Так вот вопрос, правильную я логику собираюсь использовать или нет. Для отслеживания посетителей использую ajax и когда страница открыта у пользователя каждый 10 секунд идет обращение к бд через php, в качестве идентификатора хочу использовать session_id() получается что пока открыта страница у пользователя будет постоянно идти запись в бд, заменяя данные времени, как только юзер закроет страницу данные идти перестают и система посчитает что его нет, верная ли логика или session_id() не является уникальным идетификатором и статистика будет неточной, пример части кода ниже:
Код:
 <script> 
        function show() 
        { 
            $.ajax({ 
                url: "ajax-cron.php", 
                 type: 'post',

            data: { webid: <?=$_GET['webid'];?>, user: <?=$_GET['user_id'];?>, ses_id: <?=session_id();?>},
                cache: false, 
                success: function(response){ 
               
                  
                  
                   
                } 
            }); 
        } 
     
        $(document).ready(function(){ 
            show(); 
            setInterval('show()',10000); 
        }); 
    </script>
 
10 секунд это очень часто

А если пользователь откроет 10 вкладок с вашим сайтом?

А если таких пользователей 10? 100? 1000?

Раз в 5 минут максимум, не чаще надо. + на js определение одной вкладки в качестве отправителя. Я для этого localstorage использовал
 
а мне реже нельзя. помимо счетчика у меня динамическая подгрузка контента стоит, я через админку управляю, проводил тест 40 человек смотрели проблем не было, разве это сильно грузит хостинг? у меня даже не сервер, а просто хостинг и три сайта на нем. А про вкладки так идентификатор то одинаковый не зависимо от вкладок, поэтому посчитается за одного онлайн.
 
а мне реже нельзя. помимо счетчика у меня динамическая подгрузка контента стоит, я через админку управляю, проводил тест 40 человек смотрели проблем не было, разве это сильно грузит хостинг? у меня даже не сервер, а просто хостинг и три сайта на нем. А про вкладки так идентификатор то одинаковый не зависимо от вкладок, поэтому посчитается за одного онлайн.
Про много вкладок, это я про то, что нагрузка.

Я как ни старался, у меня нагружало хост
 
  • Заблокирован
  • #5
помоему такие вещи нужно пилить на Node.js
 
а зачем вам передавать
Код:
user: <?=$_GET['user_id'];?>, ses_id: <?=session_id();?>
так и хотите чтобы какой-нибудь доморощенный хакер специально подменил данные )))
отправляйте только webid, если вы не хотите или не можете поместить эту переменную в сессию
все остальное нужно хранить в сессии и user_id и session_id само собой

в принимающем скрипте аякса сразу открывайте сессию
Код:
session_start();
и доставайте из массива $_SESSION нужные данные. так и безопаснее и меньше трафика, значит меньше нагрузка

а PHP вы вероятно учите по старым учебникам для PHP 4 ?
уже давно не рекомендуется использовать короткие теги и в частности конструкцию
Код:
<?=
В последних версиях PHP по умолчанию директива short_open_tag отключена и вы рискуете получить нерабочий код на некоторых серверах
 
Назад
Сверху