session_data
テーブルの
デフォルト挙動知らずに
前提
以下の
OS
% sw_vers ProductName: Mac OS X ProductVersion: 10.12.6 BuildVersion: 16G29
pythonの
verion % python -V Python 2.7.10
django の
version % pip list | grep Django Django (1.10.7)
参考
以下、
以下、
* Settings | Django documentation | Django
デフォルト動作
以下、
デフォルトON
保存先は
DB
settings.py でdefault
で使っている DBが 使われます。 期限切れの
session情報の 扱い
何もしない。
そのままだと、残り続けます。 後述の clearsessions
コマンドは用意されておりますが、 「アプリケーションに よって 不要に なる タイミングは 異なる 可能性が ある」ため、 デフォルトで 削除が 自動で 行われません。
settings.pyで コントロール可能な 値に ついて
Settings | Django documentation | Django を
キー値 | 内容 | デフォルト値 |
---|---|---|
SESSION_CACHE_ALIAS | どのデータベース設定を使うかを設定する | 'default' |
SESSION_COOKIE_AGE | cookieの有効期間 | 1209600 (2週間) |
SESSION_COOKIE_DOMAIN | cookieをどのスコープで設定するか | None (2週間) |
SESSION_COOKIE_HTTPONLY | cookieにHTTPONLY属性を付与するか否か | True (付与する) |
SESSION_COOKIE_PATH | cookieのパス | '/' |
SESSION_COOKIE_NAME | cookieの名称 | sessionid |
SESSION_COOKIE_SECURE | cookieのsecure属性値 | False |
SESSION_ENGINE | どこにセッションデータを登録するかを制御する | 'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | cookieのsession属性値 | False |
SESSION_FILE_PATH | ファイルにセッションを登録する場合のファイルパスを指定する | None |
SESSION_SAVE_EVERY_REQUEST | セッションデータをリクエスト毎に保存するか否か | False |
SESSION_SERIALIZER | Session情報をシリアライズする際の、シリアライザーの指定 | 'django.contrib.sessions.serializers.JSONSerializer' |
以下に
SESSION_EXPIRE_AT_BROWSER_CLOSE
このブログは True
にしています。 *SESSION_CACHE_ALIASと、
SESSION_ENGINE の 関係 *
SESSION_CACHE_ALIAS
には、settings.py の DATABASE エンジンの エイリアス名、
SESSION_ENGINE
には、エイリアスの ストレージ対応した 値を 設定する 必要が あります。 SESSION_ENGINE
Sessin engine として 以下が 設定可能です。
cookiesにユーザー情報を 保存して 大丈夫なのかと 思いましたが、 暗号化して 値を 設定するようで、 解読される 危険性は ありますが それなりに 安全そうです。 ‘django.contrib.sessions.backends.db’
‘django.contrib.sessions.backends.file’
‘django.contrib.sessions.backends.cache’
‘django.contrib.sessions.backends.cached_db’
‘django.contrib.sessions.backends.signed_cookies’
期限切れの session_dataを 削除する
削除コマンドに ついて
django のclearsessions
コマンドが
この
How to use sessions | Django documentation | Django
にclear_expired
メソッドと
この
* django/django/contrib/sessions/backends/db.py
@classmethod def clear_expired(cls): cls.get_model_class().objects.filter(expire_date__lt=timezone.now()).delete()
- django/django/contrib/sessions/backends/cache.py
@classmethod def clear_expired(cls): pass
現在、現在日付より<wbr>前の<wbr>有効期限を<wbr>持つ<wbr>セッションを<wbr>削除する<wbr>
と
ログイン状態で
コマンドの 実行
コマンド実行前に
データの 確認 python2.7 manage.py dbshell
思いのselect count(*) from django_session; ------------------------------------------------ count ------- 46 (1 行) ------------------------------------------------
ほか 少ないと 思いましたが、 ログアウトすると 削除される ため、 ブラウザ[x]ボタンで 閉じた 等の 理由で 画面閉じない 限りは 基本的に 消えてくれるのだと 思います。 コマンド実行
python2.7 manage.py clearsessions
python2.7 manage.py dbshell
select count(*) from django_session; ------------------------------------------------ count ------- 1 (1 行) ------------------------------------------------
- スケジューラへの
組み込み
後はこれを 日次で 実行する 設定に して おきます。
落下傘式な
普段使いする
以上です。
コメント