我試圖跟蹤AnonymousUsers以確定他們何時第一次訪問該網站,以及他們何時註冊到該網站。Django:如何在不使用SESSION_SAVE_EVERY_REQUEST的情況下爲AnonymousUser設置sessionid cookie
爲此,我創建了一個具有相關功能的中間件,但最初假設每個AnonymousUsers都已經有一個會話與它關聯(即sessionid cookie將在第一個響應中設置爲&關聯會話已在django_session中創建) 。 注:會議應用&中間件存在
看來,這並非如此,因爲在看會話中間件,當一個AnonymousUser首先出現在網站上,會議絕不會被修改(做用戶,因爲' _auth_user_id」和 '_auth_user_backend' 設置),因此,從未創建:
SessionMiddleware.process_response
def process_response(self, request, response):
"""
If request.session was modified, or if the configuration is to save the
session every time, save the changes and set a session cookie.
"""
try:
accessed = request.session.accessed
modified = request.session.modified
except AttributeError:
pass
else:
if accessed:
patch_vary_headers(response, ('Cookie',))
if modified or settings.SESSION_SAVE_EVERY_REQUEST:
if request.session.get_expire_at_browser_close():
max_age = None
expires = None
else:
max_age = request.session.get_expiry_age()
expires_time = time.time() + max_age
expires = cookie_date(expires_time)
# Save the session data and refresh the client cookie.
request.session.save()
response.set_cookie(settings.SESSION_COOKIE_NAME,
request.session.session_key, max_age=max_age,
expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
path=settings.SESSION_COOKIE_PATH,
secure=settings.SESSION_COOKIE_SECURE or None,
httponly=settings.SESSION_COOKIE_HTTPONLY or None)
return response
嘗試1
要嘗試克服這一點,在我的中間件,這是擺在下面的會議中間件,我將迫使保存()的會話來創建它:
if hasattr(request, 'session') and not request.session.session_key:
request.session.save()
這提供session_key可以,但不幸的是,當SessionMiddleware.process_response被調用時,request.session.modified仍然等於假,所以會話ID的Cookie沒有設置...
嘗試2
的一種方式做到這一點似乎修改會話,以任意方式,以確保request.session.modified == True
,在SessionMiddleware.process_response:
if hasattr(request, 'session') and not request.session.session_key:
request.session.save()
request.session['some_variable'] = True
這似乎解決我的問題,沒有訴諸SESSION_SAVE_EVERY_REQUEST
,這將是矯枉過正,但但它似乎並不完全正確....
問題
如何確保爲AnonymousUser創建的會話沒有先前的訪問,沒有明確修改會話,或有SESSION_SAVE_EVERY_REQUEST=True
?
感謝您的幫助!
非常感謝艾丹。我還不清楚爲什麼會話模塊不會創建一個會話,如果一個不存在,但只有當它被修改時... ...? – legrisdev 2013-02-19 16:02:01
是的,我知道你的意思。很高興你有它分類無論如何。 – 2013-02-19 18:22:08