Оптимизация таблицы cms_banner_hits

InstantCMS 1.X
#1 22 февраля 2020 в 11:33
За пять лет работы сайта, таблица стала занимать более 20 метров базы
Аналитика из нее (IP адреса) не используется нигде, кроме подсчета просмотров, CTR и хитности

Для этого существуют алгоритмы, накапливающие статистику, но использующие математику для работы с параметрами.
А аналитику можно без проблем получить, установив коды гугла или яши, не изобретая велосипед.

Итак, задача:
1. Как переделать работу модуля, чтобы не накапливалась таблица с ИПами?
2. Если уж эти ИПы необходимы, как оптимизировать таблицу или перевести заполнение данных в файл, к которому, в случае подсчета, движок будет обращаться (не думаю, что это скажется на безопасности)?

И есть мысль, что эта таблица несколько повторяет таблицу дополнения "Логирование авторизаций", только для всех, а не только зарегистрированных пользователей. Так, может быть, объединить функционал?

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

Очень хочется услышать Володю или Игоря, чтобы они поделились, как задумывалась работа компонента (думаю, что двойка аналогична в этом моменте), если конечно, есть на это время...

В общем, кто что думает по этому поводу?
#2 22 февраля 2020 в 12:01
Когда то делал
/forum/thread26700-1.html
Можно удалять статистику по любому баннеру, только поля в таблице нужно руками прописать
У меня до сих пор работает стабильно, будут вопросы, обращайтесь.
#3 22 февраля 2020 в 12:43
@chameleon9, хорошее дополнение, обязательно приму к реализации, когда дело дойдет до баннеров.

Кстати, постил как то ТЗ по баннерам, так никто и не подписался сделать...
чтобы баннеры стали кликабельны как реферальские ссылки...
а то под 5к кликов и ни копейки денег, потому что идентификаторы с переходами не передаются, нужна возможность прямых ссылок…
#4 22 февраля 2020 в 12:46


Андрей
Можно сделать, вечером поищу как, давно было не помню.
#5 22 февраля 2020 в 12:48
я тоже поищу полное ТЗ…
#6 22 февраля 2020 в 13:21
в /components/banners/model.php 42 строка
'<a href="/gobanner'.$banner['id'].'
заменить на
'<a href="'.$banner['link'].'
#7 22 февраля 2020 в 13:23


в /components/banners/model.php 42 строка
'

@chameleon9

и это позволит передавать реферальский идентификатор?
проверяли?
#8 22 февраля 2020 в 13:24



в /components/banners/model.php 42 строка
'

@chameleon9

и это позволит передавать реферальский идентификатор?
проверяли?

Андрей

просто переходит по ссылке которую указали, обычный тэг <a> без редиректов
#9 22 февраля 2020 в 13:25
@chameleon9, простите за дотошность, но переход учитывается на сайте, чья реф. ссылка приаттачена к баннеру?
#10 22 февраля 2020 в 13:29


@chameleon9, простите за дотошность, но переход учитывается на сайте, чья реф. ссылка приаттачена к баннеру?

Андрей
ссылку не режет, но переходы в компоненте не считает.
У себя делал через onclick скрипт добавляет клики
#11 22 февраля 2020 в 13:34
ну вот надо совместить несовместимое :)))

в настройках баннера тоже было бы полезно чекбокс поставить "Прямая ссылка или редирект"
чтобы каждым баннером была возможность управлять… не все же рефовские…
#12 22 февраля 2020 в 13:40
в /components/banners/model.php 42 строка
'<a href="/gobanner'.$banner['id'].'
заменить на
<a href="'.$banner['link'].'" onclick="javascript:setrate('.$banner['id'].')"

/core/js/common.js в конце
function setrate(a){$.ajax({type:"POST",url:"/components/banners/click.php",data:"id="+a})};

в /components/banners создать файл click.php

  1. <?php
  2. define('PATH', $_SERVER['DOCUMENT_ROOT']);
  3. define("VALID_CMS", 1);
  4. include PATH.'/core/classes/db.class.php';
  5. include PATH.'/core/cms.php';
  6. include PATH.'/includes/config.inc.php';
  7. $inCore = cmsCore::getInstance();
  8. $inDB = cmsDatabase::getInstance();
  9. $id = cmsCore::request('id', 'int', 0);
  10. $inDB->query("UPDATE cms_banners SET clicks = clicks + 1 WHERE id = '$id'");
  11. ?>
#13 22 февраля 2020 в 14:04

$id = $_POST['id'];

@chameleon9

Сколько уже в сборке таким образом уязвимостей?

таблица стала занимать более 20 метров базы

Андрей
Это крайне мало.

Если уж эти ИПы необходимы, как оптимизировать таблицу или перевести заполнение данных в файл, к которому, в случае подсчета, движок будет обращаться (не думаю, что это скажется на безопасности)?

Андрей
Так делать не надо.
#14 22 февраля 2020 в 14:09


$id = $_POST['id'];

@chameleon9
Сколько уже в сборке таким образом уязвимостей?

Fuze
Подскажите, чем это может грозить? Передает только id баннера
#15 22 февраля 2020 в 14:22

Подскажите, чем это может грозить?

@chameleon9
SQL уязвимость в чистом виде. В $_POST['id'] можно передать что угодно.

  1. $id = cmsCore::request('id', 'int', 0);
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.