使用Django禁用匿名用户cookie

kol*_*llo 10 django cookies session anonymous

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

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

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

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

Aks*_*aaj 10

会话数据在cookie中设置process_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
Run Code Online (Sandbox Code Playgroud)

你可以用你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',
)
Run Code Online (Sandbox Code Playgroud)