#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.
Таким образом, идея была бы примерно такой:
- Создайте глобальную переменную для положения мыши.
- Установите время ожидания для срабатывания функции примерно через 10 секунд (которое может увеличиваться со временем).
- Функция сравнивает последнее положение мыши с текущим положением мыши. Если он изменился, пользователь предположительно активен.
- Обновите глобальную переменную для положения мыши. И отправка данных на серверную часть.
- Промойте и повторите…
На самом деле, что изменилось, может быть что угодно, если вы хотите, но положение мыши, я думаю, было бы наиболее подходящим.