У меня есть следующий метод REST, который обновляет значение сеанса каждый раз, когда нажимается вкладка jQuery для сохранения активной вкладки.Значения сеанса Django иногда не сохраняются
@csrf_exempt
def update_active_tab_request(request):
"""
Stores the active tab for a given tab item
"""
for tab, active in request.GET.iteritems():
request.session[tab] = int(active)
return HttpResponse("OK", status=200)
Это довольно простая процедура, и проблема у меня в том, что оно, что значение не всегда сохраняется в сессии. Я просмотрел журналы веб-сервера, и я поместил заявления о ведении журнала, чтобы убедиться, что этот код вызывается. Кажется, что все работает, но я обнаружил, что есть шанс, что сеанс не был обновлен, когда этот метод вернется.
Думаю, что это может быть проблема с производительностью/синхронизацией при обновлении сеанса, я изменил хранилище сеансов на SESSION_ENGINE='django.contrib.sessions.backends.cache'
. Это не помогло. Я также установил SESSION_SAVE_EVERY_REQUEST=True
, чтобы всегда сохранять сеанс. Это тоже не помогло.
Я затрудняюсь объяснить это поведение. Любая помощь в освещении проблемы будет высоко оценена.
Вы проверили, что проблема заключается не в том, что сессия заканчивается на вас? По умолчанию «SESSION_COOKIE_AGE» должно быть 2 недели, если вы не изменили его. Кроме того, какое хранилище вы используете, когда не пытаетесь использовать 'SESSION_ENGINE = 'django.contrib.sessions.backends.cache'' – Ngenator
Сессия не истекла, и я использую сервер memcached. Переход к базовому серверу сеанса базы данных по умолчанию не имеет значения. Проблема все еще сохраняется. – CadentOrange
Является ли кеш как-то заполняющим? Если вы используете кеш для сеансов, нет никакой гарантии, что он будет сохранен, если вы не используете 'cache_db' https://docs.djangoproject.com/en/dev/topics/http/sessions/#using-cached-sessions – Ngenator