2012-12-07 42 views
8

तो बोतल सत्र की मेरी समझ है कि मैं यह एक शब्दकोश की तरह इस्तेमाल करते हैं और ऐसा करके एक सत्र के लिए मूल्यों को जोड़ सकते हैं ठीक।ब्राउजर विंडो बंद करने के बाद सत्र से कुछ फ्लास्क सत्र मान गायब क्यों होते हैं, लेकिन फिर उन्हें जोड़ने के बिना बाद में फिर से दिखाई देते हैं?</p> <p>सत्र [ 'कुंजी नाम'] = 'यहाँ कुछ मान'</p> <p>और वह काम करता है:

एक मार्ग पर मेरे पास AJAX पोस्ट का उपयोग कर क्लाइंट कॉल है, मैं सत्र में एक मान असाइन करता हूं। और यह ठीक काम करता है। मैं अपनी साइट के विभिन्न पृष्ठों पर क्लिक कर सकता हूं और सत्र सत्र में रहता है। अगर मैं ब्राउजर विंडो बंद करता हूं, और फिर मेरी साइट पर वापस जाता है, तो मेरे पास सत्र मूल्य था।

तो यह अजीब है और आपको लगता है कि समस्या यह है कि सत्र स्थायी नहीं है। मैंने फ्लास्क-ओपनिड को भी कार्यान्वित किया और यह सूचना संग्रहीत करने के लिए सत्र का उपयोग करता है और रहता है अगर मैं ब्राउज़र विंडो बंद करता हूं और इसे फिर से खोलता हूं। मैंने ब्राउजर विंडो बंद करने के बाद कुकी की भी जांच की, लेकिन मेरी साइट पर वापस जाने से पहले, और कुकी अभी भी वहां है।

व्यवहार का एक और अजीब टुकड़ा (जो संबंधित हो सकता है) यह है कि जब मैं AJAX पोस्ट रूट तक पहुंचता हूं और सही मान निर्दिष्ट करता हूं तो परीक्षण उद्देश्यों के लिए सत्र में लिखे गए कुछ मूल्य दूर हो जाएंगे। तो यह अजीब बात है, लेकिन वास्तव में अजीब बात यह है कि जब मैं ब्राउज़र विंडो बंद करता हूं और इसे फिर से खोलता हूं, और इस प्रकार वह मूल्य खो देता है जिसे मैं बनाए रखने की कोशिश कर रहा था, जो मैंने पहले खो दिया था वास्तव में वापस आ गया! उन्हें पुन: असाइन नहीं किया जा रहा है क्योंकि उन मानों को पुन: असाइन करने के लिए मेरे पायथन फ़ाइलों में कोई कोड नहीं है।

यहां कुछ आउटपुट हैं जो इसे स्पष्ट बनाने के लिए हैं। वे सभी एक वास्तविक पृष्ठ के लिए एक मार्ग से आउटपुट किए गए हैं, न कि ऊपर वर्णित AJAX पोस्ट मार्ग।

यह वह आउटपुट है जब मैंने सत्र में स्टोर करना चाहते हैं। मान कुंजी 'userid' है - अन्य सभी मान डमी हैं जिन्हें मैंने इस समस्या को हल करने की कोशिश में जोड़ा है। 'userid': 8 सत्र में तब तक रहेगा जब तक कि मैं ब्राउज़र विंडो बंद नहीं करता। मैं अन्य मार्गों तक पहुंच सकता हूं और मूल्य वैसे ही रहेगा जैसा कि इसे करना चाहिए।

['session.=', <SecureCookieSession {'adding using before request': 'hi', '_permanent': True, 'yo': 'yo'}>] 

'यो' मूल्य में नहीं था:

['session.=', <SecureCookieSession {'userid': 8, 'test_variable_num': 102, 'adding using before request': 'hi', '_permanent': True, 'test_variable_text': 'hi!'}>] 

अगर मैं ब्राउज़र विंडो बंद कर, और साइट में वापस जाने के लिए, लेकिन AJAX पोस्ट अनुरोध redoing बिना करते हैं, मैं इस आउटपुट प्राप्त पहला पहला आउटपुट। मुझे नहीं पता कि यह कहां से आया था। मैंने 'यो' के लिए अपना कोड खोजा और मुझे उस मूल्य को कहीं भी निर्दिष्ट करने का कोई उदाहरण नहीं है। मुझे लगता है कि मैंने इसे सत्र के दिनों में जोड़ा होगा। तो ऐसा लगता है कि यह जारी है, लेकिन जब अन्य मूल्य लिखे गए हैं तो छुपाया जा रहा है।

और यह आखिरी मैं फिर से AJAX पोस्ट रूट तक पहुंच रहा हूं, और फिर उस पृष्ठ पर जा रहा हूं जो डीबग का उपयोग करके चाबियाँ प्रिंट करता है। पहले उत्पादन मैं ऊपर पेस्ट, जो आप उम्मीद करेंगे, और 'यो' मूल्य के रूप में ही उत्पादन फिर से चला गया है (लेकिन यह वापस अगर मैं ब्राउज़र विंडो बंद आ जाएगा)

['session.=', <SecureCookieSession {'userid': 8, 'test_variable_num': 102, 'adding using before request': 'hi', '_permanent': True, 'test_variable_text': 'hi!'}>] 

मैं दोनों Chrome में इस परीक्षण किया और फ़ायरफ़ॉक्स।

तो मुझे यह सब अजीब लगता है और मुझे लगता है कि यह सत्रों के काम के बारे में गलतफहमी से उत्पन्न होता है। मुझे लगता है कि वे शब्दकोश हैं और मैं उनमें शब्दकोष मान लिख सकता हूं और उन्हें बाद में पुनर्प्राप्त कर सकता हूं जब तक कि मैं सत्र को स्थायी रूप से सेट करता हूं और कुकी हटाई नहीं जाती है।

कोई विचार यह अजीब व्यवहार क्यों हो रहा है?

उत्तर

12

समस्या को हल करता है एक डोमेन डोमेन कुकी थी। मैं 127.0.0.1:52000 पर स्थानीय रूप से साइट चला रहा हूं लेकिन कभी-कभी साइट को स्थानीयहोस्ट पर एक्सेस किया गया था: 5000 - इसलिए उन डोमेनों में से प्रत्येक में एक अलग कुकी थी। जो बताता है कि डेटा गायब क्यों हो रहा था और फिर फिर से दिखाई दे रहा था। यह सिर्फ विभिन्न डोमेन से जुड़ा हुआ था।

नीचे क्योंकि फेसबुक डोमेन नाम के लिए आईपी पते पसंद नहीं है यह के बारे में आया सिर्फ अतिरिक्त विस्तार

है। तो स्थानीय स्तर पर विकास करते समय, मैं 127.0.0.1 को000 का उपयोग कर रहा था लेकिन फेसबुक कॉलबैक यूआरएल लोकलहोस्ट था: 5000। जो ठीक काम करता है क्योंकि फ्लास्क दोनों यूआरएल पर अनुरोध उठाता है और उन्हें वही व्यवहार करता है - सभी मार्ग अपेक्षित काम करते हैं। अलग-अलग यूआरएल से जुड़े सत्र कुकीज़ को छोड़कर।

5

ब्राउज़र बंद करने के बाद फ्लास्क सत्र हटा दिए जाएंगे यदि आपने session.permanent = True सेट नहीं किया है। इस प्रकार फ्लास्क सत्र परिभाषित किए जाते हैं और दस्तावेज़ों में इसका उल्लेख किया गया है।

यदि आप सत्र को स्थायी के रूप में सेट करते हैं, तो सत्र जारी रहेगा, तो डिफ़ॉल्ट 31 दिनों का होता है। आप उस डिफ़ॉल्ट को session.permanent_session_lifetime द्वारा भी बदल सकते हैं। इसका मतलब यह है कि सत्र तब भी जारी रहेगा जब तक कि आप ब्राउज़र को बंद न करें, बेशक आप कुकी को मैन्युअल रूप से हटा दें।

आपके मामले में, मुझे यकीन नहीं है कि आप AJAX कॉल का उपयोग कैसे कर रहे हैं लेकिन सामान्य रूप से, उपर्युक्त डिफ़ॉल्ट फ्लास्क सत्रों के बारे में सच होना चाहिए।