Счетчик просмотров постов

312
07 января 2017, 13:41

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

  1. При просмотре поста, идет запрос на обновление поля "views". Как лучше идентифицировать пользователя который просмотрел уже этот пост.

  2. Куда лучше писать ид просмотренного поста? В сессии или в куки?

Answer 1

Можно оботись двумя куками (если страниц действительно много и пользователи реально много просматривают и нужен жесткий контроль)

  • 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);
Answer 2
  1. Лучше всего использовать АйПи адрес.
  2. Писать лучше в кукис.
Answer 3

Что то типа этого спасёт от накрутки. Если точность не сильно нужна.

Пока сессия действительна счетчик не сработает.

<?php
// Сессия должна стартовать до этого 
$storyId = getStoryID();
if (!in_array($storyId, $_SESSION['viewed'])) {
    incrementViews($storyId);
    $_SESSION['viewed'][] = $storyId;
}
Answer 4

Можешь попробовать вечные куки Evercookies http://samy.pl/evercookie/ Чтоб избежать накрутки, но это конечно же не лучший вариант

READ ALSO
Отобразить на карте маршрут из 5-ти точек GPS координат - Android

Отобразить на карте маршрут из 5-ти точек GPS координат - Android

Отобразить на карте в планшете маршрут из 5-ти точек массива GPS координат используя Google Map API(Маршрут рассчитывается сервером Google)

358
Как можно удалить данные из БД по id из RecyclerView

Как можно удалить данные из БД по id из RecyclerView

Коллеги, спасите, дедлайн уже близкоРабота встала

425