2016-09-30 2 views
6

Я пытаюсь проверить, находится ли пользователь в сети на моем веб-сайте, например, пользователь заходит на сайт, PHP-код будет обновлять строку db, 1 ', если он выходит из системы до' 0 '.Как проверить, находится ли пользователь в сети

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

Войти также создает сеанс, который содержит следующее:

$_SESSION['logged_in'] = true; 

Как я могу проверить это?

+0

вы должны отправить continuas ajax запрос на сервер с задержкой, так как facebook делает –

+1

@FastSnail Facebook наверняка делает ** нет ** делаем это. – ceejayoz

+0

Я повторно открыл этот вопрос, потому что связанный дубликат с 2011 года и, таким образом, не упоминает о стандартном решении веб-узлов. – ceejayoz

ответ

5

Вы не можете сделать это так. Вы можете обновить столбец last_activity на каждом просмотре страницы и рассмотреть любого пользователя, у которого не было просмотра страницы за 10-15 минут, чтобы быть неактивным, но нет надежного способа точно узнать, когда пользователь покинул сайт только с помощью PHP.

Если это строгое требование (например, для приложения чата, возможно), вам нужно будет исследовать связь в режиме реального времени с помощью веб-карт.

+0

У вас есть ссылка, чтобы прочитать о веб-сайтах? Ваше право было предназначено для приложения чата – user2452165

+0

https://www.google.com/search?q=websockets – ceejayoz

+0

Спасибо за ур ответ, мне придется больше узнать о веб-сайтах :) Но это уже помогло много. – user2452165

2

Вы можете использовать шаблон публикации-подписки. Давайте поймем, что такое шаблон публикации-подписки.

publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead characterize published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are. 

Источник: Wikipedia

Ниже приведен пример использования RabbitMQ MQTT адаптер:

Подписаться приложение пользователя А к теме «/ тема/пользователя-а», приложение пользователя B к теме «/topic/user-b "и опубликовать статус онлайн/офлайн в теме"/topic/presence ". Создайте программу на своем серверном сервере, чтобы подписаться на «/ topic/presence». Если какое-либо обновление происходит от позволяет говорить пользователь А затем опубликовать обновление для всех друзей пользователя A. Таким образом, пользователь B получит онлайн/оффлайн обновление пользователя A.

   User A    User B   PresenceListener 

Subscribe  /topic/user-a  /topic/presence /topic/presence 

Publish   /topic/user-b  /topic/presence friend list 

Реальная проблема здесь в том, как опубликовать "не в сети". В одном случае, если пользователь закрывает приложение, пока интернет все еще активен, приложение может публиковать статус «офлайн» на сервере, но что происходит, когда Интернет перестает работать?

Пройдет через «последнюю волю и завещание» (lwt).

Сообщения LWT на самом деле не связаны с обнаружением того, был ли клиент отключен или нет (эта задача обрабатывается сообщениями keepAlive). Сообщения LWT о том, что происходит после того, как клиент отключен. Сообщения LWT могут использоваться для определения сообщения, которое будет опубликовано брокером от имени клиента, поскольку клиент находится в автономном режиме и больше не может публиковать его.

Источник: http://tuanpm.net/what-is-mqtt/

Для исходного образца кода с присутствием онлайн в автономном режиме, вы можете оформить наш код Applozic Chat Javascript Plugin доступны в Github https://github.com/Applozic/Applozic-Web-Plugin/

Демонстрационная страница: https://www.applozic.com/docs/chat-examples/web.html