Сессия запроса была удалена до завершения запроса. Пользователь может выходить из системы одновременно, например

У меня есть приложение 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

Эта ошибка также может возникать, если пользователь вышел из системы по параллельному запросу.