通過HTTP跟蹤用戶存在(onine/offline)最大的問題是如何確定用戶何時離線。
很容易確定用戶何時聯機 - 只有經過身份驗證的請求才會假定用戶處於活動狀態。但是,由於HTTP是無狀態的,因此缺少後續請求可能意味着用戶已脫機,或者用戶在線,但最近沒有做任何特定於您的應用的操作。
因此,您可以做出的最佳猜測是超時,並且如果用戶在該超時期間未提出請求,則切換到脫機狀態。正如Jonathan Sampson所建議的那樣,最簡單的實現方法是使用lastTimeActive。但是,這不會給你用戶會話的長度,只是此時誰在線的近似值。
更復雜的方法是使用lastTimeActive和lastTimeLoggedIn。 LastTimeLoggedIn在第一次驗證請求時設置,與前一個驗證請求相距超過5分鐘。如果在過去五分鐘內有認證請求,則認爲用戶在線。用戶的會話長度是lastTimeActive和lastTimeLoggedIn之間的時間差。
如果您的應用程序還提供了向用戶註銷的選擇,則您可以考慮將該操作也視爲脫機。但是,除非您的應用程序是銀行應用程序,否則用戶可能會關閉瀏覽器。
此外,避免任何後臺線程更新您的用戶的脫機/在線狀態。你應該在運行上述邏輯,只有當有關於特定用戶的狀態的明確要求,你應該只更新您將被詢問用戶。
哦,不...這太可怕了......這會殺了你的服務器...... – Faruz 2009-12-15 06:42:24
我保持超過1000.000用戶的一個門戶。但是一次只有100個在線用戶(不到1%)。選擇/更新/刪除新表比查詢用戶表更好。 – 2009-12-15 06:45:32