我爲我的網站使用django auth,需要安裝會話中間件。使用Django禁用匿名用戶cookie
Django會話中間件始終添加會話cookie,即使對於匿名用戶(未通過身份驗證的用戶)也是如此。當他們進行身份驗證時,cookie將被另一個指示用戶登錄。
我想禁用匿名用戶cookie進行緩存(清漆)。
有沒有辦法在不移除會話中間件的情況下禁用匿名用戶cookie,這對於使用auth的應用來說是必需的?
我爲我的網站使用django auth,需要安裝會話中間件。使用Django禁用匿名用戶cookie
Django會話中間件始終添加會話cookie,即使對於匿名用戶(未通過身份驗證的用戶)也是如此。當他們進行身份驗證時,cookie將被另一個指示用戶登錄。
我想禁用匿名用戶cookie進行緩存(清漆)。
有沒有辦法在不移除會話中間件的情況下禁用匿名用戶cookie,這對於使用auth的應用來說是必需的?
會話數據在SessionMiddleware
的process_response
的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
而且你可以代替SessionMiddleware
使用NewSessionMiddleware
。
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',
)
我想過子類化,但是request.user.is_authenticated()命中這個類型的檢查數據庫?如果是這意味着每次頁面加載時它會擊中數據庫? – kollo
否'is_authenticated()'不會觸及數據庫。填充'request.user'命中db,它由AuthenticationMiddleware完成。但是,這無論如何都希望發生在所有請求上。但'is_authenticated'只會根據用戶返回True或False,具體如果request.user是'User'的一個實例,它將返回True,如果'request.user'是'AnonymousUser'的一個實例, ,它將返回False。但它不會擊中分貝。 –
好的,謝謝,我會深入研究這個;) – kollo
如果您不在代碼中訪問或修改會話,則不會創建會話。 – sbaechler