मैं एक django (1.10) साइट चला रहा हूँ। सेटिंग्स में, मैंने SESSION_COOKIE_AGE = 60*60*24*365 को परिभाषित किया है और यह कुकी के निर्माण से 1 वर्ष की समाप्ति निर्धारित कर रहा था।

हाल ही में, सत्र सत्र के अंत में समाप्त हो रहा है। सीधे शब्दों में कहें, शायद सत्र समाप्ति सेट नहीं की जा रही है, हालांकि यह अभी भी पहले की तरह सेटिंग्स में परिभाषित है।

क्या समस्या हो सकती है। डिफ़ॉल्ट व्यवहार का पालन क्यों नहीं किया जा रहा है। मुझे स्थानीय सर्वर, परीक्षण सर्वर और उत्पादन में एक ही समस्या का सामना करना पड़ रहा है।

मैं समझता हूं कि प्रश्न स्पष्ट नहीं है क्योंकि मुझे नहीं पता कि समस्या की जड़ क्या है। मैं जो चाहता हूं वह निर्माण से एक वर्ष होने के लिए सेशनिड कुकी की समाप्ति तिथि निर्धारित कर रहा है।

कोई संकेतक सहायक होगा।

2
sprksh 28 जून 2017, 19:31

1 उत्तर

सबसे बढ़िया उत्तर

वह कोड /django/contrib/sessions/middleware.py में होता है। आप कोड के इस ब्लॉक में देख सकते हैं कि क्या हो रहा है:

if (modified or settings.SESSION_SAVE_EVERY_REQUEST) and not empty:
    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.
    # Skip session save for 500 responses, refs #3881.
    if response.status_code != 500:
        try:
            request.session.save()
        except UpdateError:
            raise SuspiciousOperation(
                "The request's session was deleted before the "
                "request completed. The user may have logged "
                "out in a concurrent request, for example."
            )
        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,
        )

यदि get_expire_at_browser_close() समाप्ति आयु की परवाह किए बिना सत्य लौटाता है, तो यह सत्र को ब्राउज़र बंद होने पर समाप्त होने के लिए सेट करने वाला है। डिबगर या प्रिंट स्टेटमेंट का उपयोग यह जांचने के लिए करें कि वह फ़ंक्शन सही क्यों/यदि वापस आ रहा है। यदि यह सही नहीं लौट रहा है, तो यह एक ब्राउज़र/कॉन्फ़िगरेशन समस्या हो सकती है। आप देख सकते हैं कि Django अंत में set_cookie फ़ंक्शन में क्या लिख ​​रहा है। अगर वहां सब कुछ अच्छा दिखता है तो आपकी समस्या ब्राउज़र की तरफ हो सकती है।

1
Nayan 18 मई 2019, 13:27
मैं इससे गुजर चुका हूं लेकिन अभी भी उलझन में हूं कि ऐसा क्यों हो रहा है। साथ ही, यह एक ब्राउज़र समस्या नहीं है क्योंकि अन्य सिस्टमों पर समान व्यवहार हो रहा है।
 – 
sprksh
29 जून 2017, 22:14
क्या आपके पास डीबगर स्थापित है? क्या यह इन पंक्तियों को मार रहा है: max_age = कोई नहीं समाप्त होता है = कोई नहीं आपको यह देखने में सक्षम होना चाहिए कि यह इसे क्यों सेट कर रहा है। get_expire_at_browser_close() फ़ंक्शन में कदम रखें और देखें कि यह सही क्यों लौट रहा है।
 – 
kagronick
1 जुलाई 2017, 19:54
अरे, मुझे django (इस फाइल) के सोर्स कोड में बदलाव करना था। समस्या यह प्रतीत होती है कि जब आप अनुरोध को संभालने के दौरान कुकीज़ को संशोधित करते हैं, तो यह समाप्ति तिथि को कोई नहीं होने पर सेट कर रहा था। सादगी के लिए, मैंने कुकी की समाप्ति तिथि को कुछ समय के लिए किसी अन्य शर्त के बाहर परिभाषित किया है। यह सिर्फ एक अस्थायी समाधान है। साथ ही, शायद यह समस्या django 1.11 . में नहीं हो रही है
 – 
sprksh
11 अगस्त 2017, 18:07