2010-09-13 3 views
4

Я использую сеансы в Django для хранения информации о пользователе, а также другой информации. Я читал через сайт сессии Django и все еще имею несколько вопросов.Использование сеансов в Django

С сайта Джанго:

По умолчанию, Django хранит сеансы в базы данных (с использованием модели django.contrib.sessions.models.Session). Хотя это удобно, в некоторых настройках быстрее хранить данные сеанса в другом месте, поэтому Django может быть , сконфигурированный для хранения данных сеанса на вашей файловой системе или в вашем кеше.

Также:

Для получения стойких, сохранена в кэше данных, установить SESSION_ENGINE к django.contrib.sessions.backends.cached_db. Это использует кеш-запись - , каждая запись в кэш-память также будет , записанная в базу данных. Сессионные чтения используют только базу данных, если данные еще не находятся в кеше.

Есть ли хорошее эмпирическое правило, для которого можно использовать? cached_db кажется, что это всегда будет лучшим выбором, потому что лучший случай, данные находятся в кеше, а в худшем случае - в базе данных, где это было бы так или иначе. Единственный недостаток - установить memcached.

По умолчанию SESSION_EXPIRE_AT_BROWSER_CLOSE устанавливается в False, что означает куки сессии будут сохранены в браузерах пользователей для , пока SESSION_COOKIE_AGE. Используйте , если вы не хотите, чтобы у людей было для входа в систему при каждом открытии браузера .

Возможно ли, что сеанс истек в браузере закрыть И дать возраст?

Если значение является целым числом, то сеанс истекает после этого много секунд бездействия. Например, при вызове request.session.set_expiry(300) было бы сделать сеанс истечением через 5 минут.

Что считается «бездеятельностью»?

Если вы используете сервер базы данных, обратите внимание, что данные сеанса могут накапливаться в таблице базы данных django_session и Django не обеспечивают автоматическую очистку. Поэтому это ваша работа по очистке истекла сеансов на регулярной основе.

Таким образом, даже если срок действия сессии истек, в моей базе данных по-прежнему сохраняются записи. Где именно можно было бы поставить код для «чистки db»?Я чувствую, что вам понадобится отдельный поток, чтобы просто проходить через db каждый раз через некоторое время (каждый час?) И удалять любые истекшие сеансы.

ответ

4

Есть ли хорошее эмпирическое правило, для которого нужно использовать?

No.

Cached_db кажется, что он всегда будет лучшим выбором ...

Это нормально.

В некоторых случаях много процессов Django (и Apache) запрашивают общую базу данных. mod_wsgi позволяет реализовать такую ​​масштабируемость. Кэш не очень помогает, поскольку сеансы распределяются случайным образом между процессами Apache (и Django).

Возможно ли, что сеанс истекает в браузере закрыть И дать возраст?

Не понимаю почему.

Что считается «бездеятельностью»?

Предполагаю, вы шутите. «деятельность» - это - хорошо - активность. Вы знаете. Вещи происходят в Django. Запрос GET или POST, который может видеть Django. Что еще это может быть?

Где именно можно было бы поставить код для «чистки db»?

Положите его в кронтаб или что-то подобное.

Я чувствую, что вы должны были бы отдельную нить, чтобы просто пройти через БД каждый раз в некоторое время (каждый час?)

Забудьте темы (пожалуйста). Это отдельный процесс. Один раз в день все в порядке. Сколько сеансов вы считаете своими?

+0

Для большого сайта с большим количеством пользователей, возможно, у вас будет много сеансов? Я не знаю, что такое «crontab», поэтому я обязательно буду в этом разбираться. Я также думал, что «деятельность» может означать обновление или доступ к сеансу. – JPC

+1

@JPC: сначала определите «большой» и «лот». Затем выясните, сколько сеансов. Они не являются большой нагрузкой на базу данных. «активность», как в «доступе к сеансу», будет точно такой же, как любой запрос GET/POST, обработанный Django, - что еще это может означать? –

Смежные вопросы