Django でセッションを使用して、ログイン ユーザー情報やその他の情報を保存しています。私は Django セッション Web サイトを読んでいますが、まだいくつか質問があります。
ジャンゴのウェブサイトから:
デフォルトでは、Django はセッションをデータベースに保存します ( model を使用
django.contrib.sessions.models.Session
)。これは便利ですが、一部のセットアップでは、セッション データを別の場所に保存する方が高速であるため、セッション データをファイル システムまたはキャッシュに保存するように Django を構成できます。
また:
永続的なキャッシュ データの場合は、 に設定
SESSION_ENGINE
しdjango.contrib.sessions.backends.cached_db
ます。これはライトスルー キャッシュを使用します。キャッシュへのすべての書き込みは、データベースにも書き込まれます。セッション読み取りは、データがまだキャッシュにない場合にのみデータベースを使用します。
どちらを使用するのに適した経験則はありますか? cached_db
最良の場合、データはキャッシュ内にあり、最悪の場合はデータベース内にあるため、常により良い選択であるように思われます。1 つの欠点は、memcached をセットアップする必要があることです。
デフォルトで
SESSION_EXPIRE_AT_BROWSER_CLOSE
は、 は に設定されていますFalse
。これは、セッション Cookie が の期間、ユーザーのブラウザに保存されることを意味しますSESSION_COOKIE_AGE
。ユーザーがブラウザーを開くたびにログインする必要がないようにする場合は、これを使用します。
ブラウザを閉じてセッションを期限切れにし、年齢を与えることは可能ですか?
値が整数の場合、非アクティブ状態が数秒続くと、セッションは期限切れになります。たとえば、呼び出し
request.session.set_expiry(300)
により、セッションは 5 分で期限切れになります。
「非アクティブ」とは何ですか?
データベース バックエンドを使用している場合は、セッション データが
django_session
データベース テーブルに蓄積される可能性があり、Django は自動パージを提供しないことに注意してください。したがって、期限切れのセッションを定期的にパージするのはあなたの仕事です。
つまり、セッションの有効期限が切れても、データベースにはまだレコードが残っています。「データベースをパージする」ためのコードを正確にどこに置くのでしょうか? たまに(1時間ごとに)データベースを通過し、期限切れのセッションを削除するには、別のスレッドが必要になると思います。