Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2010, 22:30   #1
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию Счётчик кликов (IP, Cookies или что то ещё?)

Есть необходимость считать клики по кнопке в блоге. Кнопка есть в каждой статье и обычно кликают около 100 пользователей.
Необходимо, чтоб в каждой статье клик каждого пользователя считался только один раз.
Варианты реализации (пока вижу только 2 приемлемых):
1. Заносить IP в БД.
Плюсы: мускул уже установлен, скрипт и так работает с ним.
Минусы: 100 статей * 100 кликов = 10^4 записей в БД. Создавать отдельную таблицу для каждой статьи - не вариант, а выполнять поиск в одной таблице с десятью тысячами записей и по IP и по ID статьи - не долго ли? Да и сколько будет весить такая таблица?
2. Устанавливать cookies в браузер пользователя.
Плюсы: не насилуем свой мускул.
Минусы: меняем браузер/удаляем cookies - мелкопакостим кликами сколько угодно.

Что из двух зол выбрать?
Если SQL, то может есть вариант сохранения к примеру всех IP к одной статье в одном текстовом поле, а потом функциями php нахождения этих IP из текстового поля? И как быть с IPv6? Вообще, это очень будет нагружать BD?

Если cookies - то, например, если пользователь пожелает кликать в каждой статье, это ему 100 записей передать?

Может есть другие варианты, а я пока не в курсе? :-)
amdbodia вне форума Ответить с цитированием
Старый 18.02.2010, 23:12   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

В куках записи о всех статьях не получится хранить.
Так что - БД.
Как один из вариантов:
В таблицу статей добавить еще одно поле. Туда сохранять JSON-обьект.
Например:
Код:
{
   "visits": [{
       "ip": "82.207.66.11",
       "cookie": "7afb734f434be50"
     }, {
       "ip": "193.47.26.51",
       "cookie": "aed4ff45cc34ede"
     }, {
       "ip": "66.43.128.55",
       "cookie": "7ee34acaf324efa"
    }]
}
тут записывается для каждой статьи json обьект, который содержит массив с обьектами visits.
В каждом обьекте в массиве visits есть 2 записи: айпи пользователя и проверочный (неуникальный) ключ, записанный в куки браузера.

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

Можно использовать и по другому. Создать таблицу с пользователями и в ней сохранять в массиве JSON айдишники статей.

IPv6 или IPv4 это - без разницы.
Такое преимущество в комбинировании БД + КУКИ + JSON - позволяет минимизировать затраты на выборку/запись в БД, плюс упорядочнено хранить посещения в JSON обьектах, с которыми работать уже будет РНР, посредством функций json-php или array-php. Можно заюзать и json-php классы.

Последний раз редактировалось SkyM@n; 19.02.2010 в 10:17.
SkyM@n вне форума Ответить с цитированием
Старый 20.02.2010, 13:41   #3
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Спасибо, всё отлично получилось.
amdbodia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что мощнее или портативнее движок directx или opengl? albatros Помощь студентам 2 08.12.2009 17:43
Обработка кликов TСooltrayicon Shouldercannon Компоненты Delphi 2 04.06.2009 21:58
обработка кликов в treeview CraZZy RabbIt Общие вопросы Delphi 2 28.03.2009 22:28
Отлов кликов мыши LAFUDR Помощь студентам 9 24.05.2008 01:32