हमारे Django आवेदन निम्नलिखित सत्र प्रबंधन आवश्यकताओं है।
- उपयोगकर्ता द्वारा ब्राउज़र बंद करने पर सत्र समाप्त हो जाता है।
- निष्क्रियता की अवधि के बाद सत्र समाप्त हो जाते हैं।
- निष्क्रियता के कारण सत्र समाप्त होने पर पता लगाएं और उपयोगकर्ता को उचित संदेश प्रदर्शित करें।
- निष्क्रिय सत्र की समाप्ति से कुछ मिनट पहले एक आसन्न सत्र के उपयोगकर्ताओं को चेतावनी देते हैं। चेतावनी के साथ, उपयोगकर्ताओं को अपना सत्र बढ़ाने का विकल्प प्रदान करें।
- यदि उपयोगकर्ता ऐप के भीतर एक लंबी व्यावसायिक गतिविधि पर काम कर रहा है जिसमें सर्वर को भेजे जाने वाले अनुरोध शामिल नहीं हैं, तो सत्र को समय समाप्त नहीं होना चाहिए।
प्रलेखन, Django कोड और इससे संबंधित कुछ ब्लॉग पोस्ट पढ़ने के बाद, मैं निम्नलिखित कार्यान्वयन दृष्टिकोण के साथ आया हूं।
आवश्यकता 1
यह आवश्यकता SESSION_EXPIRE_AT_BROWSER_CLOSE को True पर सेट करके आसानी से लागू की जाती है।
आवश्यकता 2
मैंने सत्र समाप्ति अवधि निर्धारित करने के लिए SESSION_COOKIE_AGE का उपयोग करने के लिए कुछ सिफारिशें देखी हैं। लेकिन इस विधि में निम्नलिखित समस्याएं हैं।
सत्र हमेशा SESSION_COOKIE_AGE के अंत में समाप्त होता है, भले ही उपयोगकर्ता सक्रिय रूप से एप्लिकेशन का उपयोग कर रहा हो। (कस्टम मिडलवेयर का उपयोग करके या प्रत्येक अनुरोध पर सत्र को सहेज कर SESSION_COOKIE_AGE को सत्र समाप्ति की समाप्ति से रोका जा सकता है। SESSION_SAVE_EVERY_REQUEST को सही करने के लिए प्रत्येक अनुरोध पर सत्र को सहेजकर रखा जा सकता है। लेकिन अगली समस्या SESSION_COOKIE_AGE के उपयोग के कारण अपरिहार्य है।)
कुकीज़ के काम करने के तरीके के कारण, SESSION_EXPIRE_AT_BROWSER_CLOSE और SESSION_COOKIE_AGE पारस्परिक रूप से अनन्य हैं, अर्थात कुकी या तो ब्राउज़र के करीब या निर्दिष्ट समाप्ति समय पर समाप्त हो जाती है। यदि SESSION_COOKIE_AGE का उपयोग किया जाता है और उपयोगकर्ता कुकी समाप्त होने से पहले ब्राउज़र को बंद कर देता है, तो कुकी को बरकरार रखा जाता है और ब्राउज़र को फिर से खोलना उपयोगकर्ता को (या किसी और को) सिस्टम में फिर से प्रमाणित किए बिना अनुमति देगा।
यदि सत्र सक्रिय है, तो यह निर्धारित करने के लिए Django केवल कुकी पर निर्भर करता है। यह सत्र समाप्ति की तारीख की जाँच नहीं करता है जो सत्र के साथ संग्रहीत है।
इस आवश्यकता को लागू करने के लिए और ऊपर बताई गई समस्याओं को हल करने के लिए निम्न विधि का उपयोग किया जा सकता है।
- SESSION_COOKIE_AGE सेट न करें।
- प्रत्येक अनुरोध पर सत्र की समाप्ति तिथि 'वर्तमान समय + निष्क्रियता अवधि' निर्धारित करें।
- SessionMiddleware में ओवरराइड process_request और सत्र समाप्ति की जाँच करें। यदि यह अवधि समाप्त हो गई है तो सत्र को छोड़ दें।
आवश्यकता 3
जब हमें पता चलता है कि सत्र समाप्त हो गया है (ऊपर कस्टम सत्रलेख में), सत्र समाप्ति की ओर संकेत करने के अनुरोध पर एक विशेषता सेट करें। इस विशेषता का उपयोग उपयोगकर्ता को एक उपयुक्त संदेश प्रदर्शित करने के लिए किया जा सकता है।
आवश्यकता 4
उपयोगकर्ता निष्क्रियता का पता लगाने के लिए जावास्क्रिप्ट का उपयोग करें, चेतावनी प्रदान करें और सत्र का विस्तार करने का एक विकल्प भी। यदि उपयोगकर्ता विस्तार करना चाहता है, तो सत्र का विस्तार करने के लिए सर्वर पर एक जीवित पल्स भेजें।
आवश्यकता 5
उपयोगकर्ता गतिविधि (लंबे व्यवसाय संचालन के दौरान) का पता लगाने के लिए जावास्क्रिप्ट का उपयोग करें और सत्र को समाप्त होने से रोकने के लिए सर्वर पर जीवित दालों को भेजें।
उपरोक्त कार्यान्वयन दृष्टिकोण बहुत विस्तृत है और मैं सोच रहा था कि क्या कोई सरल विधि हो सकती है (विशेषकर आवश्यकता 2 के लिए)।
किसी भी अंतर्दृष्टि बहुत सराहना की जाएगी।