2016-09-30 124 views
6

我在尝试检查用户是否在我的网站上在线,例如用户正在登录该网站,php代码会更新在线调用的数据库行以' 1'时,他注销到'0'。如何检查用户是否在线

但是,如果用户刚刚退出该网站,该行将不会更新,我怎么才能检查用户是否实际上在线。

登录还创建会话,它包含以下内容:

$_SESSION['logged_in'] = true; 

我如何检查呢?

+0

你必须发送continuas ajax请求到服务器与facebook的延迟 –

+1

@FastSnail Facebook肯定不会**做到这一点。 – ceejayoz

+0

我已经重新打开了这个问题,因为链接副本是从2011年开始的,因此没有提到现在标准的websocket解决方案。 – ceejayoz

回答

5

你不能这样做。您可以更新每个网页浏览中的last_activity列,并考虑任何在10-15分钟内没有浏览量的用户处于非活动状态,但没有可靠的方法可以确切知道用​​户何时仅通过PHP离开网站。

如果这是一个严格的要求(比如聊天应用程序,也许),你需要调查使用websockets的实时通信。

+0

有没有机会阅读关于websockets的链接?您的权利它的意思是为聊天应用程序完成 – user2452165

+0

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

+0

感谢您的回答,我将不得不阅读更多关于websockets :)但这已经帮助了很多。 – 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适配器的示例:

订阅用户A的应用程序来的话题“/主题/用户A”,用户B的应用程序来的话题“/topic/user-b“并将联机/脱机状态发布到”/ topic/presence“主题。在后端服务器上创建一个程序以订阅“/ topic/presence”。如果任何一项更新是让说,然后,用户A发布的更新应用到所有的朋友用户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聊天的Javascript插件代码在Github上https://github.com/Applozic/Applozic-Web-Plugin/

演示页:https://www.applozic.com/docs/chat-examples/web.html