Подсчет времени, в течение которого пользователь был подключен к сайту

#php #mysql #time

#php #mysql #время

Вопрос:

На данный момент я использую этот SQL, чтобы проверить, подключен ли пользователь:

 date_add(last_activity, INTERVAL 3 MINUTE) > NOW()
  

Это пассивный режим и срабатывает только при загрузке страницы.

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

Что вы предлагаете для достижения этого? Использовать опрос или другой подход?

Комментарии:

1. Моим способом было бы использовать тайм-аут javascript с AJAX. Но я уверен, что есть способы получше.

2. Я не уверен, что есть способ лучше, чем использование JavaScript. Единственный способ для сервера узнать, подключены ли вы, — это чтобы страница отправила ему запрос, в противном случае, если вы не собираетесь прибегать к flash или какому-либо другому жесткому методу, вероятно, подойдет метод Ajax / JavaScript, который вы предложили.

Ответ №1:

Вам нужно использовать какой-нибудь Java-скрипт, который будет сообщать об активности с использованием ajax на вашем сайте с интервалом примерно в 1 минуту. Вам нужно реализовать какой-то механизм, чтобы проверять, активен ли пользователь, например, перемещается ли мышь или прокручивается страница, потому что некоторые пользователи могут использовать одну и ту же страницу долгое время. Если страница не использовалась с последней минуты (должна быть глобальной переменной в javascript, устанавливаемой в true при каждом движении мыши и в false при каждой отправке сообщения), вы не отправляете сообщение.
Когда вы получаете уведомления ajax на сервере, вы проверяете время между последним уведомлением ajax (должно храниться в базе данных) и текущим уведомлением и, если оно меньше интервала (возможно, 2 минуты), начисляете пользователю баллы за это.

Ответ №2:

Как уже говорилось, вы можете использовать AJAX и, в качестве альтернативы, обновить МЕТА-тег. Обратите внимание, что если я вижу, что вкладка браузера постоянно обновляется, я закрываю ее, поскольку это отвлекает. Конечно, если вы предлагаете услугу, которая требует частых обновлений (чат / shoutbox, бегущая строка), тогда это не вызывает беспокойства.

В настоящее время у меня открыто 14 вкладок, некоторые из которых я не просматривал несколько дней, поэтому вы должны спросить, насколько ценна ваша информация. Насколько я знаю, javascript не может получить текущее положение мыши, если он не перемещается по чему-либо, что обработано событием mousemove, поэтому реализация «находится ли страница в поле зрения, и пользователь перемещает свою мышь» может вызвать множество событий, когда пользователь активен.

Ответ №3:

Возможно, я здесь слишком упрощаю, и это, вероятно, не сильно поможет, если вы пытаетесь взимать плату за время пребывания на сайте или что-то в этом роде, но об этом позаботится Google Analytics. Время на сайте — это показатель, который они активно записывают.

Ответ №4:

ОК. Итак, вот моя идея. Как я упоминал в комментарии, мой способ — это тайм-аут javascript и AJAX.
Таким образом, идея была бы примерно такой:

  1. Создайте глобальную переменную для положения мыши.
  2. Установите время ожидания для срабатывания функции примерно через 10 секунд (которое может увеличиваться со временем).
  3. Функция сравнивает последнее положение мыши с текущим положением мыши. Если он изменился, пользователь предположительно активен.
  4. Обновите глобальную переменную для положения мыши. И отправка данных на серверную часть.
  5. Промойте и повторите…

На самом деле, что изменилось, может быть что угодно, если вы хотите, но положение мыши, я думаю, было бы наиболее подходящим.