Счетчик посещений в NodeJS - PullRequest
       2

Счетчик посещений в NodeJS

0 голосов
/ 22 декабря 2018

У меня есть приложение в NodeJS.У меня есть n подстраниц с изображениями.Я хочу показать, сколько раз кто-то посещал указанное изображение.

Мой подход довольно прост.По сути, с каждым /get Im, увеличивающим поле в базе данных (обрабатывайте его как псевдокод):

app.get('/image/:id', (req, res) => {
   db.find((elem) => elem.id === req.id).update((elem) => elem.counter++);
})

Это работает.Однако проблема заключается в уникальности.Если я войду в этот маршрут и нажму reload десять раз, счетчик увеличится на 10. Это бессмысленно.

Вопрос: как я могу проверить, был ли указанный пользователь уже на этом сайте, чтобы счетчик не увеличивался?

app.get('/image/:id', (req, res) => {
   if (user is first time on site) {
      db.find((elem) => elem.id === req.id).update((elem) => elem.counter++);
   }
})

Существуют библиотеки nodejs, такие как express-limiter, в которых хранятся IP-адреса.каким-то образом, поэтому они не позволят кому-то отправить тот же запрос в указанный период времени.Должен ли я сделать то же самое и хранить IP-адреса?Есть ли более простой способ сделать это?Спасибо

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Уникальный пользователь - это сложная проблема. И вопреки тому, что вы думаете, даже крупные компании (если они не владеют браузером) не сортируют их на 100%, потому что невозможно полностью решить эту проблему с помощью современных технологий.

Вы должны прочитать это:

Для сайтов, не требующих входа, это сделаночерез множество параметров это будет, как правило, их комбинация.

  • IP-адрес: одна из самых основных вещей, которую вы будете использовать, но также, как упоминалось ранее, может быть разрешена для нескольких пользователей.Также это может измениться.
  • Cookies: Чтобы отметить сеанс.Однако куки могут быть отключены / очищены.
  • Особенности браузера: Как пользовательский агент / ОС / версия сборки / если у вас есть / дополнительные плагины и т. Д. *

Все этихороши, когда они объединяются и хранятся таким образом, что вы можете делать предположения о пользователе (например, в случае удаления cookie), вы можете получить довольно точный результат, но все эти параметры могут измениться за ночь, и вы можетедействительно не определил этого пользователя как уже посещенного пользователя детерминистически.Реально вам нужно что-то вроде machine_id + local_user_id, чтобы иметь возможность сделать это.Как я уже сказал, браузеры могут это делать, но это вызовет много проблем с точки зрения конфиденциальности, поэтому я сомневаюсь, что кто-то выберет этот путь.

Я бы вообразил в случае Google / Apple, еслиПользователь использует свои сервисы через свои соответствующие браузеры, он может отобразить его еще дальше, даже для не прошедшего проверку подлинности пользователя, учитывая его телеметрию из браузера + их веб-сайтов, но, вероятно, это далеко.

Никогда не думайте, что с этим у пользователя все в порядке. Лучше всего уточнить у своих пользователей через ваш пользовательский интерфейс - согласие на cookie / хранение информации о пользователе - очень серьезная тема, и вы можете столкнуться с множеством неприятностей, если выне проектируйте это правильно.

0 голосов
/ 22 декабря 2018

Нет абсолютно надежного способа сделать это.Вы можете:

  1. Хранить IP-адреса, но это объединяет все посещения с любого IP, например, сети в учреждении или компании.
  2. Управление сессиями .Проверьте каждый запрос на cookie и создайте сеанс для пользователей, которых вы раньше не видели.Проблема в том, что когда пользователи очищают свои куки, вы теряете возможность идентифицировать их при следующем запросе.

Какую бы стратегию вы ни использовали, вам нужно будет хранить эту информацию где-то в постоянном месте, например, в базе данных, поэтомуВы можете получить его и отобразить или увеличить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...