Сессия запроса была удалена до завершения запроса. Пользователь может выходить из системы одновременно, например
У меня есть приложение Python/Django, в которое иногда входит более 100 пользователей. Однажды я нашел это в журнале ошибок Django:
The request session was deleted before the request completed.
The user may have logged out in a concurrent request, for example.
Хотя сообщение написано на вполне понятном английском языке, я понятия не имею
- что на самом деле произошло
- почему это произошло
- нужно ли мне беспокоиться об этом
- если да, как я могу предотвратить это снова?
Я нашел вопрос с почти таким же названием, но разница в том, что у меня нет ничего о кэшировании в моих настройках.
Если вам нужны какие-либо фрагменты кода, просто дайте мне знать в комментариях.
Спасибо за ваше время!
Ответы
Ответ 1
Что на самом деле произошло: сеанс пользователя был уничтожен (т.е. Они вышли из системы или закончился сеанс), в то время как тот же пользователь сделал запрос с тем же ключом сеанса.
Почему это произошло: например, это может произойти, если пользователь открыл две вкладки и вышел на одну из вкладок, в то время как запрос был также сделан с другой вкладки. Если бы оба произошли быстро, тогда эта ошибка была бы удалена.
Вам нужно беспокоиться об этом?: Нет, если в журналах вы не увидите много таких событий, и в этом случае что-то не так. Если вы нашли ошибку только один раз, то не о чем беспокоиться.
Ответ 2
Эта ошибка также может возникнуть, если пользователь пытается войти в систему, когда находится в состоянии "неактивного".
Ответ 3
Это также может произойти, потому что вы храните сеанс в Backend файле.
например:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
'dummy': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
'LOCATION': 'unique-snowflake',
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = os.environ.get('SESSION_CACHE_ALIAS', "dummy")
Решение просто изменить =: SESSION_CACHE_ALIAS = "по умолчанию"
(Redis - это моя конфигурация; вы можете использовать django.core.cache.backends.locmem.LocMemCache
или Memcached или любую другую опцию.
Или даже вы можете изменить движок сессии из кэша на что-то другое.
Ответ 4
Эта проблема может возникнуть, если у пользователя сервера (если он запускается пользователем, отличным от root), на котором запущен сервер django, недостаточно прав для каталогов. Поэтому у сервера есть только разрешение на чтение, а не на запись. Вы можете редактировать разрешение каталога проекта с помощью команды linux:
chmod u=rwx,g=rx,o= /project_path
где u относится к пользователям, g к группе пользователей и o к другим.
Вы можете проверить права доступа к каталогу с помощью опции -d ls, например так:
ls -lhd /
ls -lhd /etc
ls -lhd /etc/opt
ls -lhd /etc/opt/$DJANGO_PROJECT
Эта ошибка также может возникать, если пользователь вышел из системы по параллельному запросу.