कैसे Django में निष्क्रियता के कारण सत्र समाप्त करने के लिए?

| | | | | | | | | | | | | | | | | |

हमारे Django एप्लिकेशन में निम्नलिखित सत्र प्रबंधन आवश्यकताएं हैं।

  1. जब उपयोगकर्ता ब्राउज़र बंद करता है तो सत्र समाप्त हो जाते हैं।
  2. सत्र निष्क्रियता की अवधि के बाद समाप्त हो जाते हैं।
  3. निष्क्रियता के कारण सत्र समाप्त होने का पता लगाएं और उपयोगकर्ता को उचित संदेश प्रदर्शित करें।
  4. निष्क्रियता अवधि के अंत से कुछ मिनट पहले आसन्न सत्र समाप्ति के उपयोगकर्ताओं को चेतावनी दें। चेतावनी के साथ, उपयोगकर्ताओं को अपना सत्र बढ़ाने का विकल्प प्रदान करें।
  5. यदि उपयोगकर्ता ऐप के भीतर एक लंबी व्यावसायिक गतिविधि पर काम कर रहा है जिसमें सर्वर को भेजे जाने वाले अनुरोध शामिल नहीं हैं, तो सत्र का समय समाप्त नहीं होना चाहिए .

दस्तावेज, Django कोड और इससे संबंधित कुछ ब्लॉग पोस्ट पढ़ने के बाद, मैं निम्नलिखित कार्यान्वयन दृष्टिकोण के साथ आया हूं।

आवश्यकता 1< /strong>
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 सेट न करें।
  • प्रत्येक अनुरोध पर सत्र की समाप्ति तिथि "वर्तमान समय + निष्क्रियता अवधि" के रूप में सेट करें।
  • सेशन मिडलवेयर में प्रक्रिया_अनुरोध को ओवरराइड करें और सत्र की समाप्ति की जाँच करें। यदि सत्र समाप्त हो गया है तो उसे छोड़ दें।

आवश्यकता 3
जब हमें पता चलता है कि सत्र समाप्त हो गया है (कस्टम सत्र मिडलवेयर में) ऊपर), सत्र की समाप्ति को इंगित करने के लिए अनुरोध पर एक विशेषता सेट करें। इस विशेषता का उपयोग उपयोगकर्ता को एक उपयुक्त संदेश प्रदर्शित करने के लिए किया जा सकता है।

आवश्यकता 4
जावास्क्रिप्ट का उपयोग करने के लिए उपयोगकर्ता की निष्क्रियता का पता लगाएं, चेतावनी प्रदान करें और सत्र का विस्तार करने का विकल्प भी दें। यदि उपयोगकर्ता विस्तार करना चाहता है, तो सत्र को बढ़ाने के लिए सर्वर पर एक जीवित पल्स भेजें।

आवश्यकताएं t 5
उपयोगकर्ता गतिविधि का पता लगाने के लिए जावास्क्रिप्ट का उपयोग करें (व्यापार के लंबे संचालन के दौरान) और सत्र को समाप्त होने से रोकने के लिए सर्वर पर जीवित दालें भेजें।


उपरोक्त कार्यान्वयन दृष्टिकोण बहुत विस्तृत लगता है और मैं सोच रहा था कि क्या कोई आसान तरीका हो सकता है (विशेषकर आवश्यकता 2 के लिए)।

किसी भी अंतर्दृष्टि की अत्यधिक सराहना की जाएगी।