Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как получить список пользователей на сайте?

00 голосов
2
Всем привет! Не знаю где можно задать вопрос. Попробую задать тут.

Сделал программу (основной модуль)на Delphi. один из модулей должен показывать пользователей в реальном времени.
В общем когда пользователь заходит на сайт, я записываю в базу его ID_SESSION
если пользователя нет, (страницу долго не обновляет), то такого пользователя удаляем из базы.
На сайте в среднем 20-30 чел. программа показывает IP адреса - с которого страница всегда обновляется. уже 4 день. не могу понять, то ли ошибка то ли реально пользователь на сайте.

Вопрос такой. Как реально получить информацию что это пользователь на сайте? Я думаю, может это быть "Бот" или "Робот"?
JS:
Код
function UpdateOnline()
{ 
JsHttpRequest.query('/ajax/mUpdateOnline.php', {
          
                 
                'idsession':  document.getElementById("idsession").value 
            ,'titlepage':document.title,
            'titleurl':document.URL
            
                
            },

            function(result, errors) {
         if (document.getElementById('imgmanager')) 
         {
          if (errors == 0)
           {    
        
         document.getElementById('imgmanager').style.display = 'none';;   
         }
         else
         {
            
            document.getElementById('imgmanager').style.display = 'block';
             
         }
       
         }},
            true  
        );
  
         

}
setInterval("UpdateOnline()",15000);   


PHP кусочек
Код
<? //этот файл запускает скрит. добавляет, изменяет время онлайн или удаляет пользователя по истечению времени.
require_once $_SERVER["DOCUMENT_ROOT"]."/script/JsHttpRequest/lib/JsHttpRequest/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

  error_reporting(0);
include $_SERVER["DOCUMENT_ROOT"]."/system/connect.php";
 
 
function getRealIpAddr()
{
  if (!empty($_SERVER['HTTP_CLIENT_IP']))
  {
    $ip=$_SERVER['HTTP_CLIENT_IP'];
  }
  elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
  {
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
  }
  else
  {
    $ip=$_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}
// ID сессии 
$id_session = $_REQUEST['idsession']; 
$ip_session = getRealIpAddr();
$user = $_SERVER['HTTP_USER_AGENT'];
 
$ro = "SELECT * FROM sessions WHERE id_session ='".$id_session."'";
$query = mysql_query($ro);
if(!$query)exit(mysql_error()); 

// Если в БД уже есть такой ID сессии , следовательно 
//человек уже зашёл и пользуется ресурсом
// значит просто обновляем его последнее время обращение к серверу...
if(mysql_num_rows($query) > 0)
{
   $sa = "UPDATE sessions SET up_date=NOW(), user='".$user."' , ip_addr='".$ip_session."'  WHERE id_session ='".$id_session."'";
   $upd = mysql_query($sa);

 
}
else
{
//... в противном случаи, пользователь только зашёл, регистрируем его посещение,
// внося его идентификационный номер в БД (ID-сессии).
$as="INSERT INTO sessions VALUES('".$id_session."',NOW(),'".
    $user."','".
    $ip_session."','','0')";
$into = mysql_query($as);
    
}

// Теперь чтоб определить когда пользователь вышел, предложим условие,
// если в течении 15 минут страницы с сервера больше не запрашивались,
// будем считать, что пользователь ушёл с сайта.
// Удаляем его ID сессии 
$del = mysql_query("DELETE FROM sessions WHERE up_date<NOW()-INTERVAL '15' SECOND");


//Если поток был закрыт (окно менеджера) то пользователь ушел.  Удаляем такую сессию.
$del = mysql_query("UPDATE sessions  SET open_date_thread='' WHERE open_date_thread<NOW()-INTERVAL '5' SECOND");


 //Считываем с таблицы messager - значение onlinemessager (0 выключен. 1 включен)
 $sql = mysql_query("SELECT*FROM messager WHERE id_st='0'");
 
      while($record = mysql_fetch_array($sql))
   { 
 
 echo $record[1];
   }
   
 
  
?> 



Код на Delphi очень большой. выкладывать не буду, лень. =)

С Уважением, Константин.
спросил 12 Фев, 13 от asagava (680 баллов)

2 Ответы

00 голосов
Ну, Вы хотя бы по логам сервера посмотрите user agent для этого IP. Тогда и поймете робот/не робот.
ответил 12 Фев, 13 от xDROx (300 баллов)
00 голосов
у меня у всех пользователь показывает HTTP_USER_AGENT. а как мне определить ?
ответил 11 Март, 13 от asagava (680 баллов)