Intereting Posts
Как создать эхо-выход PHP с интервалом Извлечь DOM-элементы из строки, в PHP WAMPSERVER – обновлять версию PHP только с 5.4.3 до 5.5.4 Как создавать сеансы с использованием PHP? Добавьте круглые углы в файл jpeg как делить строку, хранящуюся в базе данных myadmin, и искать слово из этой строки в любой последовательности? PHP Поиск массива для нескольких пар ключ / значение Установка AMQP через PECL Разбор сложных данных JSON, возвращаемых API в javascript EDITED: он работал с PHP! CODE ADDED Необходима помощь в php-массиве – если текущий элемент массива = «последний или первый элемент», то «сделайте что-нибудь», Получение содержимого квадратных скобок, избегая вложенных скобок FOSUserBundle – как перенаправить уже зарегистрированных пользователей при попытке доступа к login_path Как проверить, является ли письмо верхним или нижним в PHP? $ _GET и переписывание URL для PHP Раунд до ближайших 50 000 в PHP

Как сделать онлайн / оффлайн

У меня есть система входа в систему. С моими учетными записями магазинов и куки (если вы «помните меня»), а затем вы входите в систему. Когда вы находитесь в системе входа в home.php (вы можете вводить только регистрацию сессии / cookie), я хочу, чтобы поле статуса в таблице «пользователь» обновлялось в онлайн и офлайн, когда вы выходите из системы.

Я знаю, как это сделать, чтобы обновить статус при входе в систему и выйти из системы, но вот что: Как мне делать, когда пользователь покидает сайт без выхода из системы (нажав кнопку фактического выхода из системы)? Я имею в виду, если статус установлен в онлайн, и вы покидаете страницу, он останется в сети, вы можете понять ..logic .. так что я делаю в этой ситуации? Я не хочу иметь небольшое уродливое всплывающее окно, которое выйдет из системы, когда вы покинете страницу, это такая старая школа и плохая.

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

Идеи и примеры решения для этого были бы хорошими.

Такие сайты, как, например, facebook, в чате вы меняете статус на Idle, если вы покидаете страницы, и почему-то, если вы покидаете страницу, и на какое-то время вы находитесь в автономном режиме … Как, я не знаю.

Facebook немного противен тем, что на их странице есть Javascript, который поддерживает открытое соединение с их чат-сервером. Как только соединение будет потеряно, это означает, что вы закрыли страницу (или ваше интернет-соединение), и вы отключены.

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

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

Для лучшего решения (похоже на facebook) вам нужно использовать полупостоянные соединения и использовать их для обнаружения присутствия с большей детализацией.

Как мне сделать, когда пользователь покидает сайт без выхода из системы (нажатие на фактическую кнопку выхода)?

Ну, вы не можете это обнаружить. Лучшее, что вы можете сделать, это «последняя активная» статистика или «пользователи, активные за последние минуты». В этом случае вы должны обновить поле базы данных каждый тип, который пользователь делает запрос страницы.

Вы можете сохранить временную метку на pageload, а затем базовое состояние онлайн / оффлайн с количеством времени, прошедшего с тех пор.

Например, в таблице пользователя можно указать поле, называемое last_visit, и обновить его с помощью sysdate, now () и т. Д., Когда он обратится к любой странице …

В запросе, который дает вам онлайн-пользователей, вы будете фильтровать его с пользователями, которые имеют в поле last_visit десять минут или меньше ….

как:

 where last_visit < today-(10 minutes) 

Я думаю, вы должны сделать что-то похожее на AJAX push. @Wim предлагает аналогичный подход.

Недавно я писал сайт в php как хобби, менялся от нормы, и я принимал это, когда сеансы хранятся в файлах:

  • Имейте отдельную таблицу и укажите идентификатор пользователя, last_update time, идентификатор сеанса
  • хранить переменную в сеансе, называемую last_active
  • При каждом вызове страницы проверьте, было ли последнее активное время менее 30 секунд (или что бы вы ни хотели), если оно длиннее, а затем обновите таблицу на первом шаге, если не продолжить. Это останавливает необходимость вызова на каждой странице и будет точным с точностью до минуты или около того.

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

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

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