powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как сделать чтобы счетчик грузился только один раз
26 сообщений из 26, показаны все 2 страниц
Как сделать чтобы счетчик грузился только один раз
    #38570373
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал самый простой счетчик на PHP+БД, который при загрузке страницы делает запись в БД о новом посетителе.
Некоторые сайты куда ставлю счетчик, почему то иногда пишут в БД по 3-4 просмотра за одну загрузку страницы.
Разбираться с сайтами смысла нет их делаю не я и самое главное на этих же сайтах стандартные счетчики типо Яндекс метрики работают нормально.

Какие есть способы сделать так чтобы счетчик срабатывал только 1 раз за 1 загрузку страницы ?
Вот смотрю на яндекс метрику там он как то в теге <img> вроде грузится не знаю помогает это или нет
Подскажите плз!
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38570436
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игнорировать повторные запросы того же пользователя в короткий промежуток времени, например.
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38570440
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

ну это понятно, но все равно как то не очень
яндекс же как то делает, что там у них может быть яваскрипт или что хочу понять
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38570546
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

Отсюда не видно, что творится на серверной стороне Яндекса :-)
Мож в ихних блогах найдете какую-то информацию.

Ну и... мы же не знаем, как именно работает Ваш счетчик.
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38571091
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

вот мой счетчик
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
function enumerator_all($pgsql_conn, $site_id, $user_id, $eto_host) {

    $ip = $_SERVER['REMOTE_ADDR'];
    $create_date =date('Y-m-d H:i:s');
   
  pg_query_params($pgsql_conn, 'INSERT INTO enumerator_all VALUES (default, $1, $2, $3, $4, $5, 0);' , array($user_id, $site_id, $create_date, $eto_host, $ip));   
   
}



по моему вообще ничего особенного

Я просто думал что проблема с много кратной загрузкой счетчика имеет какое то стандартное решение, не думаю что я один с этим сталкиваюсь
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38571543
phpz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tromvkle,

вот мой счетчик
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
function enumerator_all($pgsql_conn, $site_id, $user_id, $eto_host) {

    $ip = $_SERVER['REMOTE_ADDR'];
    $create_date =date('Y-m-d H:i:s');
   
  pg_query_params($pgsql_conn, 'INSERT INTO enumerator_all VALUES (default, $1, $2, $3, $4, $5, 0);' , array($user_id, $site_id, $create_date, $eto_host, $ip));   
   
}



по моему вообще ничего особенного

Я просто думал что проблема с много кратной загрузкой счетчика имеет какое то стандартное решение, не думаю что я один с этим сталкиваюсь
Код: php
1.
2.
3.
4.
5.
6.
$sql = "UPDATE enumerator_all SET ... WHERE time=$create_date"; // можно добавить и ip
$result = pg_query($sql);  // пробуем сначала апдейт
if (pg_affected_rows($result) == 0) // если записей с $create_date нет
{
    pg_query_params($pgsql_conn, 'INSERT INTO enumerator_all VALUES (default, $1, $2, $3, $4, $5, 0);' , array($user_id, $site_id, $create_date, $eto_host, $ip));
}
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38571589
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
phpz,

ничего не изменится время на несколько секунд всегда отличается
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38571637
phpz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tromphpz,

ничего не изменится время на несколько секунд всегда отличается
Как ваш счетчик подгружается? Думаю его через скрипт отдавать надо, тогда можно будет с заголовками поиграться при условии, что куки включены. Если же они отключены, то можно прицепиться к ip и user-agent и отбрасывать все повторные попытки в течение определенного времени (напр. 15 мин).
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38571681
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
phpz,

Счетчик подгружается просто вызовом функции которую я привел на странице
И кстати уникальность посетителя детектится через куки не через IP, так быстрее

А как счетчик через скрипт отдавать ? может мне это и надо, просто где ставлю счетчик сайты там используют кучу javascript что там и как разобраться сложно, я думаю что какая то повторная загрузка идет и в этом вся проблема
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572268
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trom,

Это - НЕ счетчик. Вы отслеживаете количество вызовов этой функции на сервере... браузер к серверу может обращаться 100-500 раз, в зависимости от настроек и наличия nginx в т.ч.: то ему линки отдай, то скрипты к странице, а ишо и картинки хочу... а то просто 301 редирект идет через php часть (видел и такое).

Счетчик - это прога на js, то есть на стороне клиента... подгрузилась страница в браузер - свистнула ajax-ом на сервак "я тута"... сервак принял свисток и подсчитал его. Заодно отсекает большую часть ботов, которые js-код не интрпретируют и соответственно свистеть просто не могут (кроме гугля).
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572382
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109,

Спасибо примерно начал понимать.
А можно пример самого простого скрипта на javascript для счетчика ?
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572593
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если считаете все посещения то достаточно картинки 1х1 с источником пхп-скрипт
в пхп отдаете картинку и дергаете enumerator_all()
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572903
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше вместо картинки отдавать 204 No Content
Можно ловить не только открытие страницы, но и поведение посетителя (например, клики на странице).
Чтобы снять ограничение кроссдоменного запроса, необходимо включить загрузку JS-файла в исходный HTML-код страницы, например:
Код: html
1.
<script src="http://www.mysite.ru/mycounter.js" type="text/javascript"></script>


Сам JS-файл должен содержать примерно такой код (приведён для примера один из самых простых вариантов, кроссбраузерно):
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
(function() {
  var d=document.createElement('div'), s=d.style;                           // Создаём DIV
  s.visibility='hidden'; s.position='absolute'; s.top='0px'; s.left='0px';  // Скрытый DIV
  ( d.getElementsByTagName('body')[0] || document.body ).appendChild(d);    // Дабавляем созданный DIV в DOM
  s='<img src="http://www.mysite.ru/mycounter.php?rnd='+Math.round(Math.random()*900000000).toString(); // Случайное число - параметр для уникального URL (от кеширования).
  s+='&amp;url='+encodeURIComponent(document.URL);      // URL страницы encodeURIComponent(document.referrer)
  s+='&amp;ref='+encodeURIComponent(document.referrer); // URL предыдущей страницы (если есть и не отключено в браузере посетителя)
  s+='&amp;sw='+screen.width+'&amp;sh='+screen.height;  // Размеры экрана компьютера посетителя (в пикселях)
  // ( document.body.clientWidth || window.innerWidth ) и ( document.body.clientHeight || window.innerHeight )  - текущие размеры окна браузера
  // и т.д. - тут можно насобирать всю доступную из JavaScript информацию
  // Следить, чтобы в формируемой строке не было двойных кавычек!
  s+='" alt="" />'; d.innerHTML=s; // Создаём изображение в скрытом DIV-е, запрос на сервер пошёл
  if (document.addEventListener) document.addEventListener('click',myCounterClick,true); else if (document.attachEvent) document.attachEvent('onclick',myCounterClick);
}());
function myCounterClick(e) { // Обработка клика на странице (x и y - координаты клика в пикселах)
  var x,y,d=document,de=document.documentElement; e=e||window.event;
  if (e.pageX||e.pageY) { x=e.pageX; y=e.pageY; }
  else if (e.clientX||e.clientY) {
    x=e.clientX+(de.scrollLeft||d.body.scrollLeft)-de.clientLeft;
    y=e.clientY+(de.scrollTop||d.body.scrollTop)-de.clientTop;
  }
  // далее аналогично через картинку img с параметрами отправляем запрос на наш домен со счётчиком
  // можно отправить сведения, на каком элементе web-страницы был сделан клик, и т.д. фантазия ограничена только возможностями JavaScript
}


Пример не проверял, накидал на коленке, но смысл думаю понятен.
Дополню, что в обычных браузерах, при прораммном вызове .click() на странице, e.pageX и e.pageY будут содержать нулевые значения,
таким образом, можно отличить действия пользователя от действий того или иного скрипта.
Всего не расскажешь, да и сразу не вспоминается, но различных мелочей и нюансов хватает...
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572914
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс, вместо "d.getElementsByTagName" нужно конечно "document.getElementsByTagName"
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572929
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILLHEAD,

А как сделать картинку с источником пхп скриптом ?

asws
Очень сложный пример, мне кроме подсчета просмотров ничего не надо

уже сам надумал такую схему


На целевой странице, яваскрипт функция которая грузит сраницу с пхп кодом
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<script>
  function  enumerator(site_id, user_id, eto_host){
    //alert(site_id);
       $('#g').load('func.php?site_id='+site_id+'&user_id='+user_id+'&eto_host='+eto_host);
    } 

</script>


enumerator(<?echo $site_id?>, <?echo $id?>, <?echo $eto_host?>);




Пхп страница которая гетом получает переменные и вызывает функцию которая раньше была на странице которую грузил клиент
Код: php
1.
2.
3.
4.
5.
6.
 if (isset($_GET['site_id'])) {$site_id= $_GET['site_id'];}
 if (isset($_GET['user_id'])) {$user_id= $_GET['user_id'];}
  if (isset($_GET['eto_host'])) {$eto_host= $_GET['eto_host'];}
  
  
 enumerator_all($pgsql_conn, $site_id, $user_id, $eto_host);



вроде все работает, но конечно как то все слишком навороченно, грузить картинку с иточником пхп скрипта меня наверно устроило намного больше, объясните КАК это сделать ?
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572932
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromILLHEAD,
А как сделать картинку с источником пхп скриптом ?
в источнике картинки надо добавить get параметром случайное число или время с милисекундами, чтобы браузер из кэша не взял картинку
Код: php
1.
2.
3.
4.
<?php
// в шаблоне
	echo '<img src="_путь_к_скрипту_/?rand=' . time() . '" width=1 height=1 border=0>';
?>


примеры возврата картинки _http://stackoverflow.com/questions/5630266/a-php-file-as-img-src
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572938
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы: гет-параметр в пхп-скрипте анализировать не надо
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38572962
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILLHEAD,

вроде понятно спасибо!

авторзы: гет-параметр в пхп-скрипте анализировать не надо

вы про случайную метку которая нужна чтобы браузер не загрузил картинку из кеша ?
гетом то мне надо с картинкой передать 3 моих переменные

И еще картинка будет работать так же как написал Arhat109
авторСчетчик - это прога на js, то есть на стороне клиента... подгрузилась страница в браузер - свистнула ajax-ом на сервак "я тута"... сервак принял свисток и подсчитал его. Заодно отсекает большую часть ботов, которые js-код не интрпретируют и соответственно свистеть просто не могут (кроме гугля).

то есть отсекать всяких ненужных ботов ? А то у меня получается сейчас работает по ajax все и хоть мой способ сложнее но если он отсекает все кроме реальных посетителей лучше оставить его.
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573020
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в гете свои анализируйте, а этот пофиг ). не разобрал тут был вопрос?
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573038
trom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ILLHEAD,

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

мой вариант который я привел как я понял ботов не будет учитывать
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573049
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tromILLHEAD,

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

мой вариант который я привел как я понял ботов не будет учитыватьесли <img ... > будет в шаблоне, то боты будут учитываться

вот так не будут
Код: javascript
1.
2.
3.
4.
5.
	<script language=JavaScript>
	d=document;
	rn=Math.round(Math.random()*1e6);
	d.write('<img src="_путь_к_скрипту_"/?rand='+rn+'\' width=1 height=1 border=0>');
	</script>
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573053
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы: т.е. если IMG будет создаваться браузером из js, то боты которые не умеют исполнять js учитываться не будут
чтобы гарантированно отбиться от ботов наверное надо куки задействовать
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573179
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ILLHEADчтобы гарантированно отбиться от ботов наверное надо куки задействовать
куки не помогут, ничего не поможет. Может только капча или бан )
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573185
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artas,

в конце концов есть урлы и ипы ботов яндекса гугла и прочих
фильтровать по ним
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573190
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artasILLHEADчтобы гарантированно отбиться от ботов наверное надо куки задействовать
куки не помогут, ничего не поможет. Может только капча или бан )+
именно так.
Гарантировано отбиться от ботов нельзя, некоторые ведут себя как реальный браузер,
у посковиков есть такие боты, некоторые из них не сообщают кто они, также существуют и другие неизвестные боты-браузеры.
Думаю что сам ловил именно таких ботов, вычислял их только по реферрерам с поисковой выдачи для одинаковых ключевых запросов,
то-есть были всплески переходов с одной страницы поисковой выдачи, но открытой с IP разных регионов и стран, с разными UA,
длительность таких всплесков - по несколько минут на один ключевой запрос.

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

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

Если одним счётчиком-сайтом дело не ограничится, и понадобится ставить свои счётчики на другие сайты,
всё-таки советую рассмотреть приведённый мной ранее способ организации счётчика.
Лучше располагать счётчик на одном домене для различных сайтов, чем дублировать функционал для каждого сайта.
Если сайтов со своими счётчиками будет много, лучше предварительно заполнять помежуточные таблицы или текстовые файлы,
разбив их на чётные/нечётные - по часам, и раз в час информацию переносить в основную БД, предварительно проведя анализ и коррекцию данных.
...
Рейтинг: 0 / 0
Как сделать чтобы счетчик грузился только один раз
    #38573238
ILLHEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дэжавью чтоли... кажется было ужэ про это
свой счетчик в топку. использовать сервисы
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как сделать чтобы счетчик грузился только один раз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]