每当我在django管理员上执行诸如保存、更新或过滤之类的操作时,都有机会重定向到登录页面,并且需要再次登录。这种行为经常发生,但奇怪的是:它只发生在生产环境中。我正在使用AWS fargate的ECS集群上运行应用程序。当我检查浏览器存储时,有3个cookie:csrftoken
、sessionid
和djdt
。所有这些都有很长的到期时间(至少一周(。
我的设置.py具有以下会话配置:
SESSION_CACHE_ALIAS = 'sessions'
# The module to store session data
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# A string like "example.com", or None for standard domain cookie.
SESSION_COOKIE_DOMAIN = env.str('SESSION_COOKIE_DOMAIN', default=None)
# Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_SECURE = not DEBUG
# why it doesn't resolve the sundenly logout problem!?
SESSION_COOKIE_AGE= 24*60*60*7
我尝试了以下问题,但它们对我不起作用:
Django开发服务器不断注销
Django管理员注销模型保存
任何帮助都将被视为
编辑我发现了一些重要线索:
在我获得重定向之前,浏览器控制台上出现以下错误:
Refused to execute script from '<my_url>/jsl18n' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled
显示错误消息后,任何单击或与管理员的交互都会导致重定向到登录页面。我在admin上使用了一些非常简单的JS文件来隐藏/显示一些基于用户交互的字段。我认为这个按摩与这些静态js文件有一定的关系。我发现这个确切的错误消息有一些问题,看起来不是django特有的。但这些问题对我一点帮助都没有。
我终于想通了。我已更改settings.py
:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': env.cache(
'CACHES_DEFAULT_URL', default='locmemcache://cache-default'),
'sessions': env.cache(
'CACHES_SESSIONS_URL', default='locmemcache://cache-sessions'),
'memory': env.cache(
'CACHES_MEMORY_URL', default='locmemcache://cache-memory'),
}
至:
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
我不知道为什么它能工作,但在集群环境中,本地内存缓存策略可能不是一个好的选择。如果有人有更好的猜测,请告诉我。