#django #session
Вопрос:
Это очень странное явление, которое я наблюдаю. Мой сайт работает нормально большую часть времени. Но время от времени (в одном и том же сеансе) некоторая информация о сеансе не сохраняется.
я добавил в конце своего представления:
request.session.modified = True
и в моих настройках добавлено:
SESSION_SAVE_EVERY_REQUEST = True
Также попробовал в представлении:
request.session.save()
И все равно — ничего не помогает. Время от времени информация о сеансе не сохраняется. я смотрю на базу данных и вижу, что она действительно не сохранена.
я использую сеанс django с cached_db и PickleSerializer. Есть идеи?
Чтобы ответить на Iain — Ниже приведены полные настройки сеанса. но я также попробовал использовать сеанс на основе файлов — те же результаты.
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_SAVE_EVERY_REQUEST = True CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', }
}
также пробовал с другими настройками кэша или без настроек, используя настройки по умолчанию:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
Взгляд на это потерял в себе логику. Все заканчивается тем, что:
request.session.modified = True my_logger.debug('question_list is %s' % request.session.get('question_list')) # the list exists return HttpResponse(template_block)
Комментарии:
1. Можете ли вы привести пример просмотра и путешествия пользователя, в котором сеанс не сохраняется?
2. Его часть сложной сессии… Я постараюсь изложить суть дела. Сайт является образовательным сайтом для преподавателей и студентов. Один из потоков, где это происходит, — это когда студент начинает новую «игру». система выбирает вопросы для использования и сохраняет список в массиве во время сеанса. Затем каждый раз, когда студенты нажимают «далее», следующий вопрос в списке, если он отображается. я сохраняю в сеансе список вопросов, номер вопроса в игре, идентификатор игры и многое другое. Иногда список вопросов не сохраняется (в журнале я вижу, что список был обновлен).
3. Можете ли вы добавить это представление к вопросу? Можете ли вы также добавить настройки сеанса?
4. Как развертывается ваше приложение? У вас есть несколько работников/процессов, и вы их используете
LocMemCache
?5. я попробовал разные варианты кэширования (на самом деле, я обычно работаю с memcache) -я добавил это к вопросу. Развертывание представляет собой докер, работающий в Ubuntu.