2016-08-03 77 views
3

我正在Django中進行會話。Django:清除django_session表中的會話

默認情況下,django將會話存儲在django_session中,我發現沒有辦法清除會話。

雖然clearsession可以用來刪除行。還建議將其作爲cron作業運行。

但這樣做意味着註銷所有登錄用戶..好嗎? (不確定)

這是正確的做法嗎?

+0

的可能的複製[Django的:會話數據庫表清理](http://stackoverflow.com/questions/7296159/django-session-database-table-清理) –

+2

不,'clearsessions'只會清除過期的會話。 –

+0

[刪除所有用戶的會話密鑰]可能重複(http://stackoverflow.com/questions/30864711/delete-session-key-from-all-users) – e4c5

回答

4

Django的documentation國家(重點從我):

清除會話存儲

隨着用戶創建自己的網站新的會話,會話數據可以 累積在你的會話存儲。如果您使用的是後端數據庫 ,那麼django_session數據庫表將會增長。如果您使用 文件後端,您的臨時目錄將包含增加的文件數 。

要理解此問題,請考慮數據庫 後端會發生什麼情況。當用戶登錄時,Django向數據庫表添加一行。每次會話數據 更改時,Django都會更新此行。如果用戶手動註銷,則Django刪除該行。但是如果 用戶沒有註銷,該行永遠不會被刪除。類似的 過程發生在文件後端。

Django不提供自動清除過期會話。 因此,定期清理過期會話是您的工作。 Django爲此提供了清理管理命令: clearsessions。建議以常規的 爲基礎調用此命令,例如每日cron作業

請注意,緩存後端不容易出現此問題,因爲 緩存會自動刪除陳舊的數據。 Cookie後端 也不是,因爲會話數據是由用戶的瀏覽器存儲的。

找到鏈接Abid A's answer

clearsessions命令

可以運行一個cron作業或直接清理過期會話。

因此它不會註銷每個用戶。

正如凱文克里斯托弗亨利在comment和其他possible duplicate您的問題flagged by e4c5所述。

+0

這是好的!..但這樣做會註銷所有登錄用戶..好嗎? – sachsure

+0

您可以手動刪除比'x'時間早的所有行。 –

+0

@sachsure我用文檔中的更多信息更新了答案。 –

0
  1. Django的1.6以上

    python manage.py clearsessions

  2. Django的1.5或更低

    python manage.py cleanup

  3. 從Django的殼牌

    from django.contrib.sessions.models import Session Django的會話清除在註銷 cornJob

  4. 結算會議(基於會話密鑰存在於請求)

    Session.objects.all().delete()

from django.contrib.sessions.models import Session

session_key = request.data['sessionKey']

session = Session.objects.get(session_key=session_key)

Session.objects.filter(session_key=session).delete()

Session.objects.all().delete()