2016-09-30 121 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