счетчик количества кликов по ссылкам в php - PullRequest
3 голосов
/ 07 марта 2011

Мне нужно реализовать счетчик кликов по ссылкам, который будет подсчитывать количество кликов по ссылке ...

Прямо сейчас я делаю, я связываю href с redir.php,который увеличит счетчик в БД, а затем с помощью header('Location:'); Я перенаправлю его на правильный URL.

Это работает, но это, конечно, не лучший подход.Чтобы сделать мой код эффективным, как мне улучшить счетчик ссылок?AJAX?

Не так много опыта с ajax, поэтому мне интересно, как это сделать в ajax, или есть какой-нибудь другой лучший метод ...

Я не хочу, чтобы кто-то писал скрипт бота, который бы делал несколько запросовна redir.php и испортить статистику.

Ответы [ 5 ]

2 голосов
/ 07 марта 2011

Вы можете использовать

  1. Javascript для вызова Ajax на ваш "counter.php"
  2. Добавить код Javascript (например, Google Analytic) на каждую страницу для публикации в базе данных
  3. Создать «задание cron» для анализа «access_log» (если вы считаете ссылку в том же домене, сервер)
  4. Добавить код PHP для обновления базы данных при генерации каждой страницы.

Но я думаю, что первый метод javascript - лучший.

  1. Добавить класс по ссылке в шпион
  2. Добавление «обработчика событий» для создания записи AJAX
  3. Создайте простой PHP-скрипт для обновления базы данных.

Ака

1 голос
/ 07 марта 2011

Построение ответа @ Akarun, вот пример кода (в jQuery) для добавления «слушателя» на клики по ссылке с помощью класса «шпион». Обратите внимание, что я загружаю изображение вместо попытки $.post или другого события AJAX - это потому, что оно не завершится к тому времени, когда человек уходит со страницы (что, в большинстве случаев, приводит к переходу по ссылке) ), тогда как браузер получит запрос на изображение в срок. Это все еще обычный PHP-скрипт, браузер просто думает, что загружает изображение.

$(document).ready(function() {
    $('a.spy').mousedown(function(event) {
        var page_url = "<?=$_SERVER['PHP_SELF']?>";
        var target_url = $(this).attr('href');
        if(target_url != "#" && target_url != "javascript:void(0);")
            new Image().src= "/welcome/track_link/?page_url=" + escape(page_url) + "&target_url=" + escape(target_url);
        return true;
    });
});
1 голос
/ 07 марта 2011

Если вы генерируете ссылки из источника, такого как CMS, а не вручную, вы можете передать идентификатор ссылки на свой URL-адрес и при загрузке следующего приращения счетчика страниц нажать эту ссылку. Для этого потребуется перезагрузить страницу (без идентификатора ссылки) после этого шага, чтобы убедиться, что кто-то, копирующий ссылку, не увеличит счетчик без необходимости.

Этот метод является пуленепробиваемым, если у вашего пользователя включен javascript, но если у вашего пользователя включен javascript, вы все равно можете выполнить метод, описанный выше, и через уровень на стороне клиента, обойти все это и отправить его через AJAX. *

Это может показаться избыточностью, но таким образом вы ускоряете свой процесс для большинства ваших посетителей (без перенаправления, так как вы делаете это через AJAX), и в случае, если JavaScript не работает или отключен, у вас есть отказоустойчивая система, которая позволит избежать пропуска любого клика

0 голосов
/ 07 марта 2011

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

В конце концов, ajax просто сделает то же самое в counter.php; Прочитайте и обновите базу данных. Оставайтесь с вашей нынешней реализацией.

0 голосов
/ 07 марта 2011

Сделайте так, как это делает Google:

<a href="http://www.vacationhomes.com/" onmousedown="return clk(this.href,'','','','2','','0CE4Q0gIoAzAB')">Waterfront Rentals</a>

Функция javascript.Переданный код помогает безопасности.

На самом деле, глядя на источник Google, они загружают изображение с URL-адресом в качестве параметра

window.clk=function(e,b,a,k,i,c,j)
{
    if(document.images) {
        b=encodeURIComponent||escape;a=new Image;var f=window.google.cri++;window.google.crm[f]=a;a.onerror=a.onload=a.onabort=function() {
            delete window.google.crm[f]
        };
        var d,g,h;if(google.v6) {
            d=google.v6.src;g=google.v6.complete||google.v6s?2:1;h=(new Date).getTime()-google.v6t;delete google.v6
        }if(c&&c.substring(0,6)!="&sig2=")c="&sig2="+c;a.src=["/url?sa=T&source=",google.sn,"&cd=",b(i),google.j&&google.j.pf?"&sqi=2":"","&ved=",b(j),e?"&url="+b(e.replace(/#.*/,
            "")).replace(/\+/g,"%2B"):"","&ei=",google.kEI,d?"&v6u="+b(d)+"&v6s="+g+"&v6t="+h:"",c].join("")
    }
    return true
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...