gpt4 book ai didi

Django/内存缓存错误 : The request's session was deleted before the request completed

转载 作者:行者123 更新时间:2023-12-04 01:18:34 26 4
gpt4 key购买 nike

这是完整的错误:请求的 session 在请求完成之前被删除。例如,用户可能已在并发请求中注销。

我在使用我的缓存的 session 中使用 python-memcached。每隔几天我就会遇到其中一个错误。它由 request.session.save() 上的 UpdateError 抛出。它来自 sessions/middleware.py 中的第 60 行。 99% 的时间一切正常。我在许多不同的 GET 和 POST 请求 URL 上看到过这个错误。用户报告说他们没有单击注销按钮。他们还报告说这种情况会在登录后 5 分钟发生,因此他们的 session 不会过期。在运行一个多月的时间里,我的缓存中有 0 次驱逐。如果我谷歌这个错误,看起来以前没有人得到过它。

我认为与 memcached 的连接可能由于某种原因正在关闭。它在本地主机上运行。我唯一一次看到此错误是在我将缓存配置设置为运行 memcached 但未在该接口(interface)上监听的服务器时。这将在每个请求上生成这个确切的异常。那么有没有什么方法可以让 memcache 拒绝监听一两秒钟或丢弃连接?

这是我的设置:

CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'TIMEOUT': 1209600, # Two weeks
},
}

SESSION_SAVE_EVERY_REQUEST = True
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_COOKIE_SECURE = CSRF_COOKIE_SECURE = True
SESSION_COOKIE_AGE = 60 * 90 # In 90 minutes

似乎导致此错误的可靠方法是在请求运行时在 shell 中使用 session key 运行 cache.delete。所以有些东西正在删除缓存键。我不知道它是 Django 还是 Memcached。 Memcached 确实说 STAT 逐出 0

最佳答案

我做了这个中间件来解决这个问题。它似乎已经照顾它。还要检查您的文件描述符限制。

class SLSessionMiddleware(SessionMiddleware):
"""
Fixes a bug where sessions sometime fail to be set. Catches the error 10 times and gives up.
"""

def process_response(self, request, response):

last_exception = None
for i in range(10):
try:
return super().process_response(request, response)
except Exception as e:
request.session.cycle_key()
time.sleep(1)
last_exception = e

raise last_exception

关于Django/内存缓存错误 : The request's session was deleted before the request completed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com