2010-06-12 40 views

回答

4

的方法可能是:

  • 檢查是否有名爲「在線」的cookie,但前提是用戶通過驗證
  • 如果:

    您創建一箇中間件,做對process_response以下餅乾是不存在的,

    • 集稱爲cookie '在線',值爲 '1'
    • 設置lifesp一個cookie的10分鐘
    • 更新auth.User爲當前日期時間

現在你已經所有當前登錄的用戶在你的auth.User表中該用戶的「LAST_LOGIN」字段的。所有具有比datetime.now() - 間隔(15分鐘)更新的last_login的用戶可能被認爲是「在線」。

大約每10分鐘會爲每個登錄用戶編寫數據庫。根據需要調整值「10」和「15」。

這裏的優點是數據庫寫入很少(根據您的兩個數字設置10/15)。爲了優化速度,請確保last_login已編入索引,因此包含Count的該字段上的過濾器非常快。

希望這會有所幫助。

+1

我喜歡這個想法,除了我不會更新身份驗證。用戶的last_login字段。我會更新用戶配置文件模型或其他模型。 你會如何擴展到未經過身份驗證的用戶?我假設很多機器人不會使用Cookie。您可能需要以某種方式通過IP地址進行跟蹤。 – 2010-06-19 18:58:25

1

內存中的散列表或隊列,每小時運行一個任務來保存它。

0

因爲django會話存儲在數據庫中的原因相同,所以不能在django中使用數據庫/持久存儲:可以有多個應用程序正在運行,必須同步它們的狀態+數據通過一個單獨的持久來源[1]

或者,你可能會想要寫一個與用戶ID命名的文件夾中的此信息,然後檢查其創建/修改日期查找所需信息。

+1

Django會話不必存儲在數據庫中。它們可以存儲在緩存中。 – 2010-06-12 17:54:36

1

您需要堅持信息服務器端,完整性並不重要,吞吐量和延遲非常重要。這意味着你應該使用某種鍵值存儲。

Memcached和redis的密鑰過期。你可能已經安裝了memcached,所以使用它。

您可以在每次訪問時重置user:last-seen:$username密鑰的到期時間,也可以使用mawimawi的cookie技術,並且有效期爲4 * cookie生存期。

+0

但是,如何從緩存中檢索哪些用戶在線?比如在模板標籤中顯示? – 2010-06-19 18:54:47

+0

我明白OP只希望在用戶縮略圖和個人資料頁面上有一個「在線」燈泡,並且有太多在線用戶可以顯示列表。其他人回答了不同的假設。 – Tobu 2010-06-19 20:21:43

相關問題