使用Django禁用匿名用户cookie

时间:2013-04-17 20:33:47

标签: django session cookies anonymous

我在我的网站上使用django auth,需要安装会话中间件。

Django会话中间件总是会添加一个会话cookie,即使对于匿名用户(未经过身份验证的用户)也是如此。当他们进行身份验证时,Cookie会被另一个表示用户已登录的cookie替换。

我想禁用匿名用户cookie以进行缓存(清漆)。

有没有办法在不删除使用身份验证的应用程序所必需的会话中间件的情况下禁用匿名用户cookie?

1 个答案:

答案 0 :(得分:9)

会话数据在process_response SessionMiddleware的Cookie中设置。此函数不使用任何设置或request.user,因此您无法在此方法中知道用户是登录用户还是匿名用户。因此,您无法禁止将会话cookie发送到浏览器。

但是,如果您想要此功能,那么您可以继承SessionMiddleware并覆盖process_response

from django.contrib.sessions.middleware import SessionMiddleware
from django.conf import settings

class NewSessionMiddleware(SessionMiddleware):

    def process_response(self, request, response):
        response = super(NewSessionMiddleware, self).process_response(request, response)
        #You have access to request.user in this method
        if not request.user.is_authenticated():
            del response.cookies[settings.SESSION_COOKIE_NAME]
        return response

您可以使用NewSessionMiddleware代替SessionMiddleware

MIDDLEWARE_CLASSES = (
  'django.middleware.common.CommonMiddleware',
  'myapp.middleware.NewSessionMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.middleware.doc.XViewMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
)