6

Django でセッションを使用して、ログイン ユーザー情報やその他の情報を保存しています。私は Django セッション Web サイトを読んでいますが、まだいくつか質問があります。

ジャンゴのウェブサイトから:

デフォルトでは、Django はセッションをデータベースに保存します ( model を使用 django.contrib.sessions.models.Session)。これは便利ですが、一部のセットアップでは、セッション データを別の場所に保存する方が高速であるため、セッション データをファイル システムまたはキャッシュに保存するように Django を構成できます。

また:

永続的なキャッシュ データの場合は、 に設定 SESSION_ENGINEdjango.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時間ごとに)データベースを通過し、期限切れのセッションを削除するには、別のスレッドが必要になると思います。

4

1 に答える 1

7

どちらを使用するのに適した経験則はありますか?

いいえ。

Cached_db は、常により良い選択であるように思われます...

それはいいです。

場合によっては、多くの Django (および Apache) プロセスが共通のデータベースにクエリを実行します。 mod_wsgiこの方法で多くのスケーラビリティが可能になります。セッションは Apache (および Django) プロセス間でランダムに分散されるため、キャッシュはあまり役に立ちません。

ブラウザを閉じてセッションを期限切れにし、年齢を与えることは可能ですか?

理由がわからない。

「非アクティブ」とは何ですか?

冗談だと思います。「活動」とは、まさしく活動です。ほら。Django で起こっていること。Django が認識できる GET または POST リクエスト。他に何がありますか?

「データベースをパージする」ためのコードを正確にどこに置くのでしょうか?

crontab などに入れます。

時々(毎時間?)データベースを通過するために別のスレッドが必要になると思います

スレッドを忘れてください(お願いします)。それは別のプロセスです。1日1回でいいです。セッションは何回あると思いますか?

于 2010-09-13T21:10:38.710 に答える