如何从缓存的后端会话中找到django用户

如何从缓存的后端会话中找到django用户,django,session,session-cookies,Django,Session,Session Cookies,我不时收到一些错误电子邮件,但我找不到用户 我能得到的所有信息都是sessionid和csrfcookie 这些在许多电子邮件中都是相同的,因此我认为用户就是其中之一,但我如何才能找到它,因为我使用的不是数据库会话,而是缓存会话引擎。如果您的会话引擎设置为: “django.contrib.sessions.backends.cached_db”:结合缓存和数据库的使用,您可以从数据库中查找该会话 “django.contrib.sessions.backends.cache”:仅缓存;如果没

我不时收到一些错误电子邮件,但我找不到用户

我能得到的所有信息都是sessionid和csrfcookie


这些在许多电子邮件中都是相同的,因此我认为用户就是其中之一,但我如何才能找到它,因为我使用的不是数据库会话,而是缓存会话引擎。

如果您的会话引擎设置为:

  • “django.contrib.sessions.backends.cached_db”:结合缓存和数据库的使用,您可以从数据库中查找该会话

  • “django.contrib.sessions.backends.cache”:仅缓存;如果没有持久性,则必须从缓存中查找该会话,但如果缓存已满或缓存服务器已重新启动,则必须足够快才能将缓存数据逐出。在这里,当错误发生时,您必须查找会话,例如,您需要处理由该错误引起的异常,此时,您可以使用会话或请求查找用户,并将用户存储在日志中

正如您所说的“许多电子邮件中的会话都是相同的,所以我认为用户就是其中之一”,因此,当您收到电子邮件时,会话可能仍然存在于缓存中!因此,请在缓存中查找它,例如,如果会话在缓存中用其“sessionid”标识(键),请尝试使用“sessionid”作为键来获取它

from django.core.cache import cache
session = cache.get(sessionid)
然后获取用户:

from django.contrib.auth.models import User
data = session.get_decoded()
uid = data.get('_auth_user_id', None)
user = User.objects.get(id = uid)

这只是一个提示,我不确定它是否有效,因为我没有与您相同的设置。

我使用的是backends.cache和电子邮件由
django.utils.log.AdminEmailHandler发送。