Top / Programming / Python / Django TIPS / セッションデータを削除する

セッションデータを削除する

データベースに登録されたセッションデータは、自動的には削除されません。
失効したセッションデータがどんどん溜まっていきます。

セッションデータをデータベースから削除するのは開発者の責任になります。

Djangoにはセッションをクリーンアップするサンプルプログラムが django/bin/daily_cleanup.py に用意されています。

django/bin/daily_cleanup.py

#!/usr/bin/env python

"""
Daily cleanup job.

Can be run as a cronjob to clean out old data from the database (only expired
sessions at the moment).
"""

from django.core import management

if __name__ == "__main__":
    management.call_command('cleanup')

実際の処理は django/core/management/commands/cleanup.py にあります。

django/core/management/commands/cleanup.py

import datetime
from django.core.management.base import NoArgsCommand

class Command(NoArgsCommand):
    help = "Can be run as a cronjob or directly to clean out old data from the database (only expired sessions at the moment)."

    def handle_noargs(self, **options):
        from django.db import transaction
        from django.contrib.sessions.models import Session
        Session.objects.filter(expire_date__lt=datetime.datetime.now()).delete()
        transaction.commit_unless_managed()

更新履歴