2010-04-19 32 views
0

問題陳述 - 想知道特定的Web應用用戶是否活動(即登錄並使用站點)並能夠查詢活動用戶列表或確定用戶的活動狀態。維護Web活動用戶列表

約束條件 - 不需要精確(即,如果用戶在特定時間段內活動,即使他們已關閉瀏覽器,也可以說他們處於活動狀態)。

我覺得應該有這種類型的問題的設計模式,但一直沒有能夠找到任何東西在這裏或網絡上的其他地方。

途徑我考慮:

  1. 維護一個更新的用戶執行動作(或動作某個子集)的任何時間的表。然後會查詢在某個閾值時間內執行了操作的用戶。

  2. 嘗試監視會話信息並維護一個列出登錄用戶並在一段時間後超時的表。

  3. 其他一些更標準的方法呢?

你會如何解決這個問題(同樣,從設計模式的角度來看)?

謝謝!

+0

你在用什麼框架? – 2010-04-19 21:55:25

+0

Yii ............ – 2010-04-20 02:24:08

+0

在Yii緩存:http://www.yiiframework.com/doc/guide/caching.overview – 2010-04-20 17:45:14

回答

1

如果你用組件或模塊而不是表格來思考它,你會有更多的運氣保持它。我看到它的方式,你需要以下接口。

public interface IActiveUsers { 
    bool IsUserActive(User u); 
} 
public interface ITrackActiveUsers { 
    void MarkUserAsActive(User u); 
} 

您可以實現這些使用一個數據庫,但爲什麼不使用你選擇的web框架的內置緩存?

基本上當將用戶標記爲活動時,用「LoggedInUser-1234」之類的鍵向高速緩存中插入密鑰,其中1234是用戶的一些唯一標識符。然後簡單地設置任何你想要的超時時間(5分鐘,10等),並將該值設置爲真。然後,在查詢用戶是否處於活動狀態時,只需檢查緩存是否包含同一個鍵​​的真實值。

0

我認爲#1是適合您的問題的適當解決方案,我想也是常見的解決方案。它可以讓你決定你認爲用戶「活躍」的HTTP請求(即決定何時和是否更新「最後活動」表)和/或分類活動(具有更多「最後XXX活動」列和更新每個他們在用戶執行不同的操作後)。