Я создаю приложение, которое подсчитывает, сколько времени пользователь тратит на просмотр видео YT на моем веб-сайте.В зависимости от времени позже они получат какое-то вознаграждение.
Здесь есть проблема безопасности: как я могу помешать им одновременно наблюдать за двумя игроками?Я пытался использовать решения, такие как:
- Локальное хранилище
- Сеансовое хранилище
- PHP
$_SESSION
- Глобальные переменные
И ничего не получалось.После некоторого времени исследований я понял, что это всего лишь front-end
, и я не могу передать эту информацию на разные компьютеры, браузеры и т. Д.
Хорошо, поэтому я дал шанс базе данных,Его нельзя так легко изменить, как «Локальное хранилище» или «Сеансовое хранилище», однако у него все еще есть некоторые проблемы, которые я перечислю ниже.
Изображение, которое пользователь входит на сайт иначинает воспроизведение видео.Используя YT Embed API
, я запрограммировал так, чтобы записи базы данных изменились на «active_players» 1. И это число не может быть больше, чем 1 .Все работало, как ожидалось, пока не произошло одно:
Я не мог вычесть 1 из 1, если пользователь закрывает браузер, компьютер внезапно выключается или вкладка браузера закрывается .
Да, я мог бы выбросить окно предупреждения, используя метод window.onbeforeunload
, но его можно довольно легко обойти, просто установив флажок, чтобы блокировать сообщения такого типа.Это также не решило бы неожиданное поведение компьютера, такое как выключение и т. Д.
У меня есть идея, как я могу сделать это теоретически:
Прежде всего, отправьте AJAX
запрашивает базу данных сервера каждую 1 секунду и что-то делает с записями базы данных (обновляет или вставляет и удаляет некоторые данные).
При использовании cron jobs
каждую 1-секундную проверку результатов базы данных, если ониВсе еще обновляется или нет.
Я не знаю точно, как это должно быть сделано, и я впервые работаю с такими вещами.
Похожий на мой пост: Как узнать, находится ли пользователь на сайте или в автономном режиме?
Может быть, у нас уже есть намного лучшие альтернативы, я полагаюеще не знаю :) Помощь будет очень признателен.Спасибо.