首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在请求完成之前,请求的会话被删除。例如,用户可能已在并发请求中注销。

在请求完成之前,请求的会话被删除。例如,用户可能已在并发请求中注销。
EN

Stack Overflow用户
提问于 2017-10-27 20:02:02
回答 11查看 13.7K关注 0票数 32

我有一个Python/Django应用程序,它有时有超过100个用户登录。有一天,我在Django错误日志中找到了这个:

代码语言:javascript
运行
复制
The request's session was deleted before the request completed. 
The user may have logged out in a concurrent request, for example.

虽然这封信是用完全可以理解的英语写的,但我不知道。

  • 到底发生了什么
  • 为什么会发生
  • 我是否需要担心
  • 如果是,我怎样才能防止这种情况再次发生?

我发现了一个标题几乎相同的问题,但区别在于,我的设置中没有任何关于缓存的内容。

如果您需要任何代码,请在评论中告诉我。

耽误您时间,实在对不起!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2017-10-28 03:02:22

实际发生的情况:当同一个用户使用相同的会话键发出请求时,一个用户的会话被销毁了(即他们注销了,或者会话过期了)。

发生这种情况的原因:例如,如果用户打开两个选项卡并在其中一个选项卡中登出,同时也从另一个选项卡发出请求,则可能会发生这种情况。如果这两种情况都是连续发生的,那么就会出现这样的错误。

您需要担心吗?:除非您在日志中看到了很多这样的事件,否则不会,在这种情况下会出现一些错误。如果你只发现错误一次,那就没什么好担心的了。

票数 18
EN

Stack Overflow用户

发布于 2019-02-14 09:33:52

这也可能发生,因为您将会话存储在虚拟缓存后端中。

例:

如果您已经将"DummyCache“配置为默认的缓存系统,或者如果您有指向虚拟缓存的SESSION_CACHE_ALIAS点,那么即使在请求响应周期之间,这些存储数据也有可能被删除。也就是说,您的请求到达Djagno服务器并正在积极处理。

问题

您的settings似乎处于任何可能的配置中。

案例A:

代码语言:javascript
运行
复制
# Possible Current Configuration 
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
        'LOCATION': 'unique-snowflake',
     }
}

SESSION_ENGINE = "django.contrib.sessions.backends.cache"

代码语言:javascript
运行
复制
# Another Possible Current Configuration 
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
              "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    'cache_backend_for_user_session': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
        'LOCATION': 'unique-snowflake',
    }
}

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "cache_backend_for_user_session"

溶液

我希望,现在您已经得到了解决方案,如果会话引擎依赖于缓存,最好不要将它们指向DummyCache

您可以在缓存中使用SESSION_ENGINE与任何其他缓存的合并。

代码语言:javascript
运行
复制
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"  # or comfortabley anything else
CACHES = {
    'default': {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
              "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
     }
}

(Redis是我的首选配置;您可以使用django.core.cache.backends.locmem.LocMemCachedjango.core.cache.backends.memcached.MemcachedCache或任何其他选项。或者,如果您仍然想使用DummyCache,甚至可以将会话引擎从缓存更改为其他类似的东西

代码语言:javascript
运行
复制
# File Based
SESSION_ENGINE = "django.contrib.sessions.backends.file"

# Works In Combination With  Current Cache and Database, fairly persistant
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"   

# Cookie Based, Browser Clearing Will lose it. 
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"  
票数 14
EN

Stack Overflow用户

发布于 2018-09-05 05:55:17

如果用户试图在“非活动”状态下登录,也会发生此错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46982576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档