我正在Django創建一個簡單的多人游戲系統。這個系統的一部分是,我想自動更新與用戶相關聯的模型中的isCurrentlyActive值,然后將它們注銷。
我實現了這個問題中看到的中間件。這工作得很好,但是,它要求用戶重新加載頁面或者向服務器發出某種請求以便更新。這對我不起作用,因為我想讓后端自動更新用戶的后端數據并注銷他們,而不需要他們向服務器發送請求。
有人知道怎么做嗎?我看到了Celery和django-auto-logout的實現,但是它們看起來太復雜了。
最明顯的處理方式是通過會話,因為這是它們的設計目的: https://docs.djangoproject.com/en/4.2/topics/http/sessions/
理論上,您只需設置會話到期時間: https://docs . django project . com/en/4.2/topics/http/sessions/# django . contrib . sessions . backends . base . session base . set _ expiry
如果你是手動的,http工作的方式,唯一能判斷某人是否活躍的方法是請求是否被發送到后端。這就是為什么你需要中間件的原因,因為中間件只是一個包裝器,包裝所有發送的請求。您需要的中間件必須跟蹤用戶發送的最后一個http請求的日期/時間
為了從后面自動過期,您需要編寫一個調度任務(Celery)來查看他們最后一次發送請求的時間,如果它超過了您的最大超時時間,則強制注銷。然而,隨著用戶數量的增長,您會發現您正在運行大量的計劃任務,這些任務會大量查詢系統,但收效甚微。
然而,我確實認為會話和會話超時會更清楚地涵蓋您想要做的事情。