我在 Django 中使用会话来存储登录用户信息以及其他一些信息。我一直在阅读 Django session 网站,但仍有一些问题。
来自 Django 网站:
默认情况下,Django 将会话存储在您的数据库中(使用模型
django.contrib.sessions.models.Session
)。虽然这很方便,但在某些设置中,将会话数据存储在其他地方会更快,因此可以将 Django 配置为将会话数据存储在文件系统或缓存中。
还:
对于持久的缓存数据,设置
SESSION_ENGINE
为django.contrib.sessions.backends.cached_db
. 这使用直写缓存——每次写入缓存也将写入数据库。如果数据尚未在缓存中,则会话读取仅使用数据库。
是否有一个好的经验法则来使用哪个?cached_db
似乎它总是一个更好的选择,因为最好的情况是,数据在缓存中,最坏的情况是它在数据库中。一个缺点是我必须设置 memcached。
默认情况下,
SESSION_EXPIRE_AT_BROWSER_CLOSE
设置为False
,这意味着会话 cookie 将在用户浏览器中存储的时间为SESSION_COOKIE_AGE
。如果您不希望人们每次打开浏览器时都必须登录,请使用此选项。
是否有可能两者都有,会话在浏览器关闭时过期并给出一个年龄?
如果 value 是一个整数,会话将在几秒的不活动后过期。例如,调用
request.session.set_expiry(300)
将使会话在 5 分钟后到期。
什么被认为是“不活动”?
如果您使用的是数据库后端,请注意会话数据可能会累积在
django_session
数据库表中,并且 Django 不提供自动清除功能。因此,定期清除过期会话是您的工作。
这意味着,即使会话过期,我的数据库中仍然有记录。究竟将代码“清除数据库”放在哪里?我觉得您需要一个单独的线程来每隔一段时间(每小时?)通过数据库并删除任何过期的会话。