在Django中使用会话

时间:2010-09-13 21:03:15

标签: python django session django-sessions

我在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没有   提供自动清洗。因此,   清除过期是你的工作   定期举行会议。

这意味着,即使会话过期,我的数据库中仍有记录。究竟哪里会把代码放到“清除数据库”?我觉得你需要一个单独的线程来每隔一段时间(每小时?)浏览数据库并删除任何过期的会话。

1 个答案:

答案 0 :(得分:5)

  

对于哪一个使用,是否有一个好的经验法则?

没有

  

Cached_db似乎永远是一个更好的选择......

没关系。

在某些情况下,有许多Django(和Apache)进程查询公共数据库。 mod_wsgi以这种方式允许很多可伸缩性。缓存没有多大帮助,因为会话是在Apache(和Django)进程中随机分布的。

  

是否可以同时使用两者,会话在浏览器关闭时到期并给出年龄?

不明白为什么不。

  

什么被认为是“不活跃”?

我猜你在开玩笑。 “活动”是 - 好 - 活动。你懂。发生在Django的东西。 Django可以看到的GET或POST请求。还有什么呢?

  

究竟哪个人会把代码放到“清除数据库”中?

将它放在crontab或类似的东西中。

  

我觉得你需要一个单独的线程来每隔一段时间(每小时一次)浏览数据库吗?

忘记线程(请)。这是一个单独的过程。一天一天好。你认为你会有多少次会议?