Django会话在代理之后变得困惑,已经登录

时间:2011-01-31 13:14:31

标签: django session proxy session-hijacking

目前,我们的产品用户在其内部网络上使用代理时遇到了一些问题。

根据他们的系统管理员,代理对端口80和443开放,并且不对cookie做任何事情,只会阻止某些网站。

问题:当用户X登录我们的应用程序时,用户Y也会登录到之前没有使用过应用程序的计算机上(但是在同一个代理服务器后面)?这应该是不可能的(使用django默认的auth app)?

我们使用的是Apache,Nginx,Django 1.0和Postgresql。另请注意,使用runserver运行时可以正常工作,但不能使用nginx。

仅当此用户使用代理时才会发生这种情况,在其他网络上,它确实有效。

以前有人经历过这个吗?如果是这样,你怎么解决它?

提前致谢!

的Stefan

1 个答案:

答案 0 :(得分:0)

这可能是发送的缓存相关标头的问题,例如Cache-Control。 默认情况下,没有任何内容可以阻止代理缓存提供给登录用户的页面。通过发送Cache-Control:private或Cache-Control:max-age = 0,您可以告诉代理不要缓存页面,这是私有页面所需要的。

您可以使用cache_page装饰器每个视图来控制它, 或者通过设置CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True来完全禁用已登录用户的缓存。当然,这会降低您的页面速度,具体取决于它的复杂程度。在这种情况下,您可能希望进行更细粒度的缓存。