Здравствуйте. Хочу сделать счетчик просмотров поста, и тут возникли вопросы.
При просмотре поста, идет запрос на обновление поля "views". Как лучше идентифицировать пользователя который просмотрел уже этот пост.
Куда лучше писать ид просмотренного поста? В сессии или в куки?
Можно оботись двумя куками (если страниц действительно много и пользователи реально много просматривают и нужен жесткий контроль)
user_unique_id
=уникальное_значение (token)
visited_post_id
=id
Первой кукой мы генерируем уникальный айди пользователя (любой супер уникальный). В visited_post_id
записываем уникальный ID поста (или страницы). Пользователь заходит, js проверяет куки, если есть такие то куки с этими ключами то отдать их через ajax (json) на сервер и проверить в таблице mysql есть ли пользователь с идентификатором уникальное_значение
в таблице visited
у которого visited_post_id
равно id
. То есть получается если устраивать контроль, то сохранять или в браузере пользователя, или в базу.
На самом деле даже если просто хранить просмотры в кукис (в браузере), то их поместится довольно таки большое количество. Если двигатся в сторону снижения нагрузки на сервер, то есть смысл рассматривать вариант переноса "просмотренных сообщений" на сторону клиента.
Но если нужен жесткий контроль, тогда уникальный идентификатор + сессия + куки + сохранять ip в mysql. Как то так. Для начала в любом случае будет неплохо генерировать уникальный id для пользователя (если такого еще нет). Здесь можно посмотреть как задать куки на JQuery.
Ниже код для создания случайного токена для пользователя
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
var d = new Date();
var n = d.getTime();
var token=n+getRandomInt(9,99999)+getRandomInt(1,99999);
Что то типа этого спасёт от накрутки. Если точность не сильно нужна.
Пока сессия действительна счетчик не сработает.
<?php
// Сессия должна стартовать до этого
$storyId = getStoryID();
if (!in_array($storyId, $_SESSION['viewed'])) {
incrementViews($storyId);
$_SESSION['viewed'][] = $storyId;
}
Можешь попробовать вечные куки Evercookies http://samy.pl/evercookie/ Чтоб избежать накрутки, но это конечно же не лучший вариант
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Отобразить на карте в планшете маршрут из 5-ти точек массива GPS координат используя Google Map API(Маршрут рассчитывается сервером Google)
Коллеги, спасите, дедлайн уже близкоРабота встала