10

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

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

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

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

4

1 回答 1

10

会话数据设置在 cookieprocess_responseSessionMiddleware。此函数不使用任何设置 或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',
)
于 2013-04-18T06:16:29.933 回答