Мне нужна помощь, чтобы узнать причину неожиданного истечения времени ожидания сеанса в веб-приложении Django, развернутом в AWS.Я гуглил пару дней и до сих пор не могу решить.Не могли бы вы дать мне какую-либо идею для этого.
Цель
Установить время ожидания сеанса 30 минут (без перезагрузки в течение 30 минут приводит к автоматическому выходу из системы)
Текущая ситуация
В настоящее время значение session_id, отображаемое в Google Chrome, кажется правильным.Однако до этого времени автоматический выход из системы неожиданно завершается.Почти через 2–3 минуты после последнего запроса.
session_id и время его истечения показано в файле cookie приложения Google Chrome
В настройках.py , все переменные окружения, относящиеся к сеансу, определены как
# Application definition
INSTALLED_APPS = [
...
'django.contrib.sessions', # default sessions app is included
...
]
MIDDLEWARE = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
'recommend.middlewares.session_manage.SessionManageMiddleware',
# Sessions manage middleware named session_manage.py is also included. Also shown below.
]
SESSION_TIMEOUT_MINUTE = 30
session_manage.py
process_request () выполняется каждый раз, когда подается запрос,но, похоже, работает правильно, если SESSION_TIMEOUT_MINUTE меньше 2.
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
SESSTION_TIMEOUT = settings.SESSION_TIMEOUT_MINUTE * 60
class SessionManageMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
self.process_request(request)
response = self.get_response(request)
return response
def process_request(self, request):
if not request.user.is_authenticated():
return
if 'last_touch' not in request.session:
request.session['last_touch'] = datetime.now().strftime(DATETIME_FORMAT)
elif (datetime.now() - datetime.strptime(request.session['last_touch'],
DATETIME_FORMAT)
> timedelta(seconds=SESSTION_TIMEOUT)):
auth.logout(request)
else:
request.session.modified = True
request.session.set_expiry(SESSTION_TIMEOUT)
request.session['last_touch'] = datetime.now().strftime(DATETIME_FORMAT)
Кроме этого, в nginx.conf , я уверен, что это связано, но keepalive_timeout устанавливается как
keepalive_timeout 65;
Кроме того, в Балансировщик нагрузки AWS , Время простоя устанавливается как 600 секунд .
О настройках балансировщика нагрузки AWS
Если у вас есть какие-либо советы по решению этой проблемы, напишите мне.
Спасибо.