Djangoのセッション設定についてご紹介します。
条件
- Django 2.1.3
- Python 3.7.0
セッションを使用するための設定
デフォルトで以下の設定が記述されています。
# settings.py INSTALLED_APPS = [ 'django.contrib.sessions', ] MIDDLEWARE = [ ‘django.contrib.session.middleware.SessionMiddleware', ]
セッションエンジンの種類
SESSION_ENGINEに以下のいずれかの値を指定することでセッションの持ち方を指定できます。
デフォルト値は「データベースを使ったセッション」’django.contrib.sessions.backends.db’です。
‘django.contrib.sessions.backends.db’
- データベースを使ったセッション
- manage.py migrate を実行することで、セッションデータを保存する1つのデータベーステーブルが作成される。
‘django.contrib.sessions.backends.file’
- ファイルを使ったセッション
- セッションファイルを保存する場所を設定したい場合には、SESSION_FILE_PATH を設定する。
‘django.contrib.sessions.backends.cache’
- シンプルなキャッシュセッション
- セッションデータはキャッシュに直接保存される。
- セッションデータが永続化されず、キャッシュがいっぱいになったりキャッシュサーバが再起動した際に、一度キャッシュされていたデータがクリアされてしまうことがある。
‘django.contrib.sessions.backends.cached_db’
- キャッシュデータを確実に永続化したい場合
- キャッシュにデータが書き込まれるのと同時に、データベースにも同じデータが書き込まれる。
- セッションは、データがキャッシュ上から読み込めない時に限り、データベースからデータを読み込みむ。
- クッキーを使ったセッション
- セッションデータは、 暗号化署名 のための Django のツールと SECRET_KEY を使って保存される。
参考
詳細は以下をご参照ください。
https://docs.djangoproject.com/ja/2.1/topics/http/sessions/#configuring-the-session-engine
例)ログインセッション
デフォルトではログイン毎にDBのdjango_sessionテーブルにレコードが追加されます。
ログアウトすると当該テーブルからレコードが削除されます。
よくある設定
セッション保持期間はデフォルトで2週間となっています。
settings.pyにSESSION_COOKIE_AGEを設定することで保持期間を指定できます。
また、SESSION_SAVE_EVERY_REQUESTをTrueとすることで何らかの操作が行われるたびにセッション有効期間を延長することができます。
# settings.py # セッションの設定 SESSION_COOKIE_AGE = 600 # 10分 SESSION_SAVE_EVERY_REQUEST = True # 1リクエストごとにセッション情報を更新
セッションレコードの削除
ログアウトした場合はセッションレコードが削除されますが、セッション切れの場合はdjango_sessionテーブルにレコードが残ったままとなります。
放っておくとdjango_sessionにレコードがたまっていってしまいます。
そこで以下のコマンドで、定期的にレコードを削除することをお勧めします。
サーバーのクーロンに定期実行の設定を行うとよいでしょう。
manage.py clearsessions
参考
詳細は以下をご参照ください。
https://docs.djangoproject.com/ja/2.1/topics/http/sessions/#clearing-the-session-store
Django
クーロンの使い方は以下をご参照ください。