2011-12-11 109 views
1

這確實是一個可怕的問題,但我的搜索結果被大量的隱私問題堵塞:在高層次,有人可以向我解釋如何檢測哪些用戶當前登錄到我的網站? (如果這有助於解決問題,我正在爲學校項目構建Facebook克隆。)Google/Facebook聊天如何知道當前登錄的用戶?

+2

如果rekire和olivehour的答案降級,我希望你也可以降級我的答案。你可能想評論一下爲什麼這不能回答你的問題,或者改變你的問題,因爲這正是你所要求的。 – Nicolas78

+0

我不知道Facebook是如何做到的,但今天早些時候我看到了這個問題,並從Firebase中發現了「[存在](https://www.firebase.com/tutorial/#session/a0aev1q0skq)」教程應用程序。它查詢持久存儲(數據庫行)以查看用戶是否「登錄」。無論您使用數據庫還是會話cookie,只需訪問登錄和註銷事件即可確定用戶是否在線。 – jrhorn424

回答

1

那麼,用戶登錄到您的網站會發生什麼?會話在服務器端創建,將用戶未來的請求鏈接到登錄。這必須發生,因爲HTTP本身是無狀態的 - 也就是說,它不知道現在請求其個人資料頁面的人與剛通過身份驗證的人是一樣的,除非您讓客戶端發回一些信息,通常是cookie或,現在不那麼頻繁,URL中的會話ID。

這意味着您的服務器上的某個地方已經有多少人登錄(即有當前會話)的信息。如果您使用的是Web框架,則可能需要查看其會話管理的詳細信息。如果你不是,你已經解決了這個問題。只需找出會話的存儲位置,即可知道哪些用戶在線。

當然,你不知道用戶是否沒有註銷就離開了,但這是一個難以解決的問題;會話管理系統通常在一段給定的不活動時間後(即,你的服務器最近還沒有收到任何請求),所以你可以使用任何系統告訴你的開始。如果您想要更多內容,則可以自行跟蹤最近一次的活動,並且如果該活動過去的分鐘數大於n分鐘,則可以決定用戶處於非活動狀態。

-1

當用戶登錄您的站點時,您將他們的活動記錄到數據庫。然後,你開始檢測他們在網站上的活動。如果他們閒置了一段時間(例如他們的最後一次活動是10或15分鐘前),則可以假定他們處於離線狀態。

1

實際的答案將取決於您使用哪些框架來創建您的網站,但一般而言,瀏覽器可能與Web服務器保持開放連接,從而實現雙向通信。這有時被稱爲COMET。

Facebook等,然後可以跟蹤它有什麼打開的連接,哪些用戶登錄,併發起連接(使用相同的會話技術,它用於維護跨請求用戶狀態)。

-1

最簡單的方法是通過IP。

對您的網站的每個請求都將通過IP地址進行請求。你的main(index)文件必須有一個邏輯來把這個信息存儲在某個地方或者顯示給你。

這是找出當前查看您網站的人最簡單的方法。

1

我還沒有真正研究它,但我會假設一個無限期掛起的HTTP請求會在有人關閉頁面時關閉。您可以使用這種方式來利用此優勢,通過使用這樣的請求來輪詢用戶關閉頁面的時間。

替代方法:每10秒鐘對新消息進行一次輪詢,並簡單地說,如果用戶在15秒內沒有輪詢,則用戶已經離開。

但是,實時檢測當用戶退出該頁面時一直是一個大問題。

1

您可以在每分鐘檢查一次的網頁上添加一個Javascript心跳,如果您在幾分鐘內沒有收到任何消息,則認爲它們已註銷。否則,如果您的網站是基於會話的,則假定他們在會話過期時註銷。