Djangoで期限切れセッション情報を削除する方法
Djangoで期限切れセッション情報を削除する方法をご紹介します。
目次
条件
- Django 2.1.7
- Python 3.7.0
Djangoの期限切れセッション情報
Djangoでセッションを使用する場合、セッション情報が消されずに残ってしまう場合があります。
具体的には以下のようなケースです。
- ユーザがDjangoのWebサイトにログインして、しばらく時間が経過しセッションタイムアウトになった。
ユーザが明示的にログアウト処理を行えば、セッション情報は削除されますが、セッションタイムアウトになった場合、そのセッション情報は残り続けます。
すなわち、DBでセッション情報を管理していた場合、DBにレコードが増え続け、ファイルでセッション情報を管理していた場合、セッションファイルが増え続けることになります。
Djangoでは自動で期限切れセッション情報を削除する機能は無いため、管理者が削除する必要があります。
DBでセッションを管理する場合
以下のテーブルに期限切れセッション情報が蓄積されていきます。
- django_session
期限切れセッション情報の削除方法
以下のコマンドを実行することで、期限切れセッション情報をすべて削除することが出来ます。
python manage.py clearsessions
cronによる定期的な削除
cronの日次ジョブとして期限切れセッション情報を削除するのがお勧めです。
shell作成
対象Djangoプロジェクトのmanage.pyが存在するディレクトリに、期限切れセッション情報を削除するshellを作成します。
$ cd /home/user/django/mysite $ vi purge_sessions.sh
shellの内容
#!/bin/bash cd /home/user/django/mysite # /usr/bin/python manage.py clearsessions # python 2.Xを使用する場合 /usr/bin/python3 manage.py clearsessions
shell実行権限設定
$ chmod 755 purge_sessions.sh
cron設定
$ cd /etc/cron.d $ sudo vi purge_sessions
# m h dom mon dow user command # 毎日1:30に実行する 30 1 * * * user /bin/bash /home/user/django/mysite/purge_sessions.sh
設定反映
cronの再起動を行います。
$ sudo service cron restart
参考
Django公式:Clearing the session store
https://docs.djangoproject.com/en/2.2/topics/http/sessions/#clearing-the-session-store
stackoverflow
https://stackoverflow.com/questions/7296159/django-session-database-table-cleanup