Как сделать онлайн / оффлайн - PullRequest
3 голосов
/ 08 августа 2010

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

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

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

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

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

Ответы [ 7 ]

4 голосов
/ 08 августа 2010

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

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

1 голос
/ 08 августа 2010

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

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

0 голосов
/ 08 августа 2010

В последнее время я пишу сайт на php как хобби, я перешел от нормы, и я решил, что сессии хранятся в файлах:

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

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

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

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

0 голосов
/ 08 августа 2010

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

0 голосов
/ 08 августа 2010

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

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

как:

where last_visit < today-(10 minutes)
0 голосов
/ 08 августа 2010

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

0 голосов
/ 08 августа 2010

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

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

...