Всем привет! Не знаю где можно задать вопрос. Попробую задать тут.
Сделал программу (основной модуль)на Delphi. один из модулей должен показывать пользователей в реальном времени.
В общем когда пользователь заходит на сайт, я записываю в базу его ID_SESSION
если пользователя нет, (страницу долго не обновляет), то такого пользователя удаляем из базы.
На сайте в среднем 20-30 чел. программа показывает IP адреса - с которого страница всегда обновляется. уже 4 день. не могу понять, то ли ошибка то ли реально пользователь на сайте.
Вопрос такой. Как реально получить информацию что это пользователь на сайте? Я думаю, может это быть "Бот" или "Робот"?
JS:
[CODE]
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);
[/CODE]
PHP кусочек
[CODE]
<? //этот файл запускает скрит. добавляет, изменяет время онлайн или удаляет пользователя по истечению времени.
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];
}
?>
[/CODE]
Код на Delphi очень большой. выкладывать не буду, лень. =)
С Уважением, Константин.
Сделал программу (основной модуль)на Delphi. один из модулей должен показывать пользователей в реальном времени.
В общем когда пользователь заходит на сайт, я записываю в базу его ID_SESSION
если пользователя нет, (страницу долго не обновляет), то такого пользователя удаляем из базы.
На сайте в среднем 20-30 чел. программа показывает IP адреса - с которого страница всегда обновляется. уже 4 день. не могу понять, то ли ошибка то ли реально пользователь на сайте.
Вопрос такой. Как реально получить информацию что это пользователь на сайте? Я думаю, может это быть "Бот" или "Робот"?
JS:
[CODE]
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);
[/CODE]
PHP кусочек
[CODE]
<? //этот файл запускает скрит. добавляет, изменяет время онлайн или удаляет пользователя по истечению времени.
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];
}
?>
[/CODE]
Код на Delphi очень большой. выкладывать не буду, лень. =)
С Уважением, Константин.