2012-12-20 11 views
8

मेरे पास एक Django ऐप है जो प्रमाणित उपयोगकर्ताओं दोनों के लिए उपयोगकर्ताओं के उत्पाद विकल्प रिकॉर्ड करता है। मेरा इरादा बाद में रजिस्टर करने के लिए request.session.session_key चर का उपयोग करने के लिए एक उपयोगकर्ता के साथ अनाम डेटा संबद्ध करने के लिए यदि वे तय है, एक ला इस पोस्ट:प्रमाणीकरण पर django सत्र कुंजी बदलना

Django storing anonymous user data

हालांकि, ऐसा लगता है कि सत्र महत्वपूर्ण परिवर्तन जब में उपयोगकर्ता के लॉग/रजिस्टर्स ताकि सत्र कुंजी अब उपयोगकर्ता से संबद्ध न हो। क्या यह Django सत्र ढांचे का सही व्यवहार है। क्या मैं जिस कार्यक्षमता की तलाश कर रहा हूं उसे प्राप्त करने का कोई ठोस तरीका है?

किसी भी मदद की बहुत सराहना की।

+0

[बदलते सत्र कुंजी जब संशोधित Django सत्र] पर एक नजर डालें 11192904/Django-सत्र बदलते-सत्र-की-जब-संशोधित)। –

+0

ध्यान दें कि सत्र कुंजी के इस बदलाव से कुछ हद तक सत्र निर्धारण के खिलाफ सुरक्षा में मदद मिलती है। तो इसे बंद करने से पहले मान लें। – Mark

उत्तर

10

settings.py

SESSION_ENGINE = फ़ाइल session_backend.py

from django.contrib.sessions.backends.db import SessionStore as DbSessionStore 

class SessionStore(DbSessionStore): 
    def cycle_key(self): 
     pass 

और सत्र में 'youapp.session_backend'

निर्देशिका youapp में में के बाद लॉगिन

3

जबकि नहीं बदला दृष्टिकोण एनएनएमवेयर द्वारा सुझाए गए दृष्टिकोण इस विशेष मामले के लिए काम कर सकते हैं, एक बेहतर है।

cycle_key के अंदर कुछ भी करने के बजाय, हमें सुपर विधि को कॉल करना चाहिए और फिर सत्र को सहेजना चाहिए।

क्योंकि यदि आप मूल cycle_key फ़ंक्शन के अंदर देखते हैं तो आप देखेंगे कि पुराने सत्र का डेटा नए पर कॉपी किया गया है, लेकिन वास्तव में सहेजा नहीं गया है।

में settings.py

SESSION_ENGINE = 'yourapp.session_backend' 

चेक कि SESSION_ENGINE एक मॉड्यूल (.py फ़ाइल) की ओर इंगित करता है, लेकिन बैकएंड वर्ग के लिए नहीं!

अब, अपने 'yourapp/session_backend.py' में निम्न करें: (http://stackoverflow.com/questions/:

from django.contrib.sessions.backends.db import SessionStore as DbSessionStore 

class SessionStore(DbSessionStore): 
    def cycle_key(self): 
     super(SessionStore, self).cycle_key() 
     self.save() 
संबंधित मुद्दे