Tengo una aplicación Python / Django que a veces tiene más de 100 usuarios conectados. Un día, encontré esto en el registro de errores de Django:

The request's session was deleted before the request completed. 
The user may have logged out in a concurrent request, for example.

Aunque el mensaje está escrito en un inglés bastante comprensible, no tengo idea

  • lo que realmente pasó
  • porqué sucedió
  • si necesito preocuparme por eso
  • En caso afirmativo, ¿cómo puedo evitar que esto vuelva a suceder?

Encontré una pregunta con casi el mismo título, pero la diferencia es que no tengo nada sobre el almacenamiento en caché en mi configuración.

Si necesita algún código, hágamelo saber en los comentarios.

¡Gracias por tu tiempo!

15
karlosss 27 oct. 2017 a las 23:02

4 respuestas

La mejor respuesta

Lo que realmente sucedió: la sesión de un usuario se destruyó (es decir, se desconectó o la sesión expiró) mientras el mismo usuario realizó una solicitud con la misma clave de sesión.

Por qué sucedió: por ejemplo, podría suceder si el usuario tenía dos pestañas abiertas y cerró sesión en una de las pestañas, mientras que también se realizó una solicitud desde otra pestaña. Si ambos ocurrieran en rápida sucesión, entonces se daría este error.

¿Necesita preocuparse por eso ?: No, a menos que vea muchos eventos como este en los registros, en cuyo caso hay algo mal. Si encontró el error solo una vez, entonces no hay nada de qué preocuparse.

13
solarissmoke 28 oct. 2017 a las 03:02

Este error también puede ocurrir si un usuario está intentando iniciar sesión cuando está en estado 'inactivo'.

1
Shivanshu Bhardwaj 5 sep. 2018 a las 05:55

Esto también puede suceder porque almacena la sesión en un backend de memoria caché ficticia. p.ej :

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")

La solución es solo change =: SESSION_CACHE_ALIAS = "default"

(Redis es mi configuración; puede usar django.core.cache.backends.locmem.LocMemCache o Memcached o cualquier otra opción. O incluso puede cambiar el motor de sesión de caché a otra cosa.

1
Jerrychayan 14 feb. 2019 a las 09:33

Este problema puede ocurrir cuando el usuario del servidor (si lo ejecuta un usuario diferente al root) que ejecuta el servidor django no tiene suficientes permisos en los directorios. Por lo tanto, el servidor solo tiene permiso para leer y no para escribir. Puede editar el permiso del directorio del proyecto utilizando el comando linux:

chmod u=rwx,g=rx,o= /project_path

Donde u se refiere a usuarios, g al grupo de usuarios yo a otros.

Puede verificar los permisos de un directorio con la opción -d de ls, así:

ls -lhd /
ls -lhd /etc
ls -lhd /etc/opt
ls -lhd /etc/opt/$DJANGO_PROJECT

Este error también puede ocurrir si el usuario puede haber cerrado sesión en una solicitud concurrente.

0
Alouani Younes 1 feb. 2019 a las 20:26