我在Django中使用会话来存储登录用户信息以及一些其他信息。我一直在浏览Django会话网站,但仍有几个问题。
来自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没有 提供自动清洗。因此, 清除过期是你的工作 定期举行会议。
这意味着,即使会话过期,我的数据库中仍有记录。究竟哪里会把代码放到“清除数据库”?我觉得你需要一个单独的线程来每隔一段时间(每小时?)浏览数据库并删除任何过期的会话。
答案 0 :(得分:5)
对于哪一个使用,是否有一个好的经验法则?
没有
Cached_db似乎永远是一个更好的选择......
没关系。
在某些情况下,有许多Django(和Apache)进程查询公共数据库。 mod_wsgi
以这种方式允许很多可伸缩性。缓存没有多大帮助,因为会话是在Apache(和Django)进程中随机分布的。
是否可以同时使用两者,会话在浏览器关闭时到期并给出年龄?
不明白为什么不。
我猜你在开玩笑。 “活动”是 - 好 - 活动。你懂。发生在Django的东西。 Django可以看到的GET或POST请求。还有什么呢?什么被认为是“不活跃”?
究竟哪个人会把代码放到“清除数据库”中?
将它放在crontab或类似的东西中。
我觉得你需要一个单独的线程来每隔一段时间(每小时一次)浏览数据库吗?
忘记线程(请)。这是一个单独的过程。一天一天好。你认为你会有多少次会议?