Использование сессий в Джанго - PullRequest
6 голосов
/ 14 сентября 2010

Я использую сессии в 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 не обеспечить автоматическую продувку. Следовательно, ваша работа, чтобы очистить истек сеансы на регулярной основе.

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

1 Ответ

6 голосов
/ 14 сентября 2010

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

номер

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

Отлично.

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

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

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

Что считается "бездействием"?

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

Куда именно можно поместить код для "очистки базы данных"?

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

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

Забудьте темы (пожалуйста). Это отдельный процесс. Раз в день это хорошо. Как вы думаете, сколько сеансов у вас будет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...