Учёт количества нажатий по ссылкам через редирект

govnoproger.ru > php > Учёт количества нажатий по ссылкам через редирект

Продолжаем тему собирания инфы о ваших юзерах.
Я буду писать редирект а не перенаправление. Так принято в интернете.

Казалось-бы всё просто. Мы просто делаем так-же как и при учёте количества просмотров картинок.
Оффтоп:
Кстати я реализовал эту тему. Если кому интересно, то она находится здесь.

Продолжим.
На самом деле это не так.
Объясню. Если делать также как и в этой статье выше, то вы сможете вести только суммарный учёт кликов по ссылкам.
Узнать на какую именно ссылку нажали вы не сможете, в случае, если на странице больше одной ссылки через редирект.

Либо же вам придётся дописывать параметры к ссылке, которые сделают её уникальной: например типа link.php?id=какоето_число.
Проблема в том, что мы хотим автомата, и мы очень ленивые.

Чтобы правильно учесть количество нажатий по ссылкам на автомате, нужно учитывать:

  • То, куда ведёт эта ссылка, то-есть адрес ссылки. С этим в принципе проблем нету.
  • Адрес страницы на которой находится ссылка. Это нужно, так как вы можете ссылаться на один и тот-же адрес в разных статьях. Вот тут огромная проблема.

Это можно сделать через реферер, но его можно подменить — поэтому такой вариант отпадает.
К тому-же многие не передают реферер. Ну например я.

Выбор автоматически падает на джаваскрипт.

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

С сессиями тоже облом.
Вот вырезка из статьи:

session.use_cookies - если равно 1, то PHP передает идентификатор в куках, если 0 - то нет.
session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 - то нет.
 Менять эти и другие параметры сессий можно так же, как и другие настройки PHP - в файле php.ini, а так же с помощью команды ini_set() или в файлах настройки веб-сервера

 Если включена только первая, то при старте сессии (при каждом вызове session_start()) клиенту устанавливается кука. Браузер исправно при каждом следующем запросе эту куку возвращает и PHP имеет идентификатор сессии. Проблемы начинаются, если браузер куки не возвращает. В этом случае, не получая куки с идентификатором, PHP будет все время стартовать новую сессию, и механизм работать не будет.

 Если включена только вторая, то кука не выставляется. А происходит то, ради чего, в основном, собственно, и стоит использовать встроенный механизм сессий. После того, как скрипт выполняет свою работу, и страница полностью сформирована, PHP просматривает ее всю и дописывает к каждой ссылке и к каждой форме передачу идентификатора сессии. Это выглядит примерно так:
<a href="/index.php">Index</a> превращается в 
<a href="/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f">Index</a>
 а к формам добавляется скрытое поле 
<input type="hidden" name="PHPSESSID" value="00196c1c1a02e4c37ac04f921f4a5eec" />
 И браузер при клике на любую ссылку, или при нажатии на кнопку в форме, пошлет в запросе нужную нам переменную - идентификатор сессии!

Как видите слишком много обстоятельств чтобы не передать сессию.

Вывод:
Наша задумка с автоматом невозможна, вернее возможна, но она будет дырявой и юзерозависимой.
Используйте способ типа link.php?id=какоето_число.

Рекомендую:

10.10.2011 | последняя редакция: 12.10.2011 |