【问题标题】:stop django from logging out after source changes在源更改后阻止 django 注销
【发布时间】:2016-01-29 13:19:14
【问题描述】:

我正在开发一个 django 项目,几天后 django 在我更改源文件后不断记录我。

cookies 和数据库中的过期日期显示还有 1 个月。

即使在进行更改后,会话 cookie 与数据库中的相同,但我必须再次登录。并在登录两个 sessionids(数据库和浏览器)后更改。

我正在使用 django 1.8.5

编辑: 一些会话相关设置:

SESSION_EXPIRE_AT_BROWSER_CLOSE        False
SESSION_COOKIE_HTTPONLY                True
SESSION_COOKIE_DOMAIN                  None
SESSION_SAVE_EVERY_REQUEST             False
SESSION_COOKIE_SECURE                  False

编辑2:

为了更清楚一点:更改一些源文件(python 文件,模板工作正常)后,服务器将重新加载(如果我使用 --noreload,我必须手动执行以获取更改),之后每个人都已注销。

编辑3:

CACHES              {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
SESSION_ENGINE      'django.contrib.sessions.backends.db'

【问题讨论】:

  • 我猜这个问题是在你没有持久会话存储时出现的。并且默认情况下 django 确实有它。
  • 我正在与一个团队合作,通过 git 进行版本控制 - 我们 4 人中有 2 人受此影响。从一开始就是我们中的一个(但似乎并没有打扰他),我从几周前就受到了影响。正如您在我在顶部的帖子中看到的那样,expire_at_browser_close 是错误的,这应该(根据 django api)足以用于持久会话。进一步设置:SESSION_ENGINE 'django.contrib.sessions.backends.db'
  • 请向我们展示您的SESSION_ENGINECACHES 设置。
  • SESSION_ENGINE 如上所述是'django.contrib.sessions.backends.db'CACHES{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} 但我已经尝试过其他人,它不会改变任何东西

标签: django session


【解决方案1】:

Django 有一个SESSION_ENGINE 设置,用于控制会话信息在服务器上的存储方式。其中一个选项是django.contrib.sessions.backends.cache,它只将会话信息存储在缓存中。

现在,有一个特定的缓存后端 - django.core.cache.backends.locmem.LocMemCache - 将信息存储在本地 python 内存中(有关更多信息,请参阅 CACHES)。此缓存后端是开发的典型选择,当然每次重新加载服务器时都会重置。

结合使用这两个设置可以完美地解释您所描述的情况。希望这会有所帮助!

【讨论】:

  • 您好,感谢您的回复。我测试了一些设置,但它并没有改变任何情况。首先,我的缓存变量设置为 LocMemCache,我尝试了一些不同的方法,但是每次更改 python 文件时我都会注销:/ 即使使用不同的缓存设置,这也毫无意义。会话密钥保留在数据库和我的浏览器中。他们应该互相认识。 (会话引擎设置为我的数据库)
猜你喜欢
  • 2015-08-29
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2017-05-11
相关资源
最近更新 更多