गोरिल्ला सत्रों में सत्र चर का उपयोग करते समय उन्हें बनाए नहीं रखा जाता है
समस्या
गोरिल्ला सत्र वेब टूलकिट का उपयोग करते समय, सत्र चर को अनुरोधों में बनाए नहीं रखा जाता है। जब सर्वर लॉन्च होता है और उपयोगकर्ता लोकलहोस्ट:8100/ पर जाते हैं, तो उन्हें लॉगिन.html पर निर्देशित किया जाता है क्योंकि सत्र मान मौजूद नहीं होते हैं। लॉगिन करने पर, सत्र चर संग्रहीत किए जाते हैं, और उपयोगकर्ताओं को Home.html पर पुनर्निर्देशित किया जाता है। हालाँकि, एक नया टैब खोलने और लोकलहोस्ट:8100/ इनपुट करने से सत्र चर की उपस्थिति के बावजूद, जैसा कि अपेक्षित था, उपयोगकर्ताओं को होम.एचटीएमएल के बजाय लॉगिन.एचटीएमएल पर निर्देशित किया जाता है।
स्पष्टीकरण
इसमें कई समस्याएं उत्पन्न होती हैं प्रदत्त कोड:
- सत्र पथ: सत्र पथ को /loginSession के रूप में परिभाषित किया गया है। यह सत्र कुकीज़ की वैधता को इस विशिष्ट पथ तक सीमित कर देता है। सत्र को विभिन्न पथों (जैसे लोकलहोस्ट:8100/होम) पर काम करने के लिए, आपको सत्र पथ को /.
- सिंटैक्स त्रुटियां: शर्त सत्र.मान["ईमेल" पर सेट करना चाहिए "] == शून्य गलत है। इसके बजाय, यह जांचने के लिए टाइप दावे का उपयोग किया जाना चाहिए कि क्या सत्र मान एक स्ट्रिंग है: यदि वैल, ठीक है: = session.Values["email"].(string); ठीक है { // जांचें कि क्या मान एक स्ट्रिंग है }। सत्र बचत के दौरान किसी भी संभावित समस्या को पकड़ने और संभालने के लिए त्रुटि प्रबंधन जोड़ें। सेशनहैंडलर विधि. इसके अतिरिक्त, राउटर पथ को इस फ़ंक्शन के भीतर सेट नहीं किया जाना चाहिए क्योंकि यहां इसका दायरा नहीं है। इसके बजाय, राउटर पथ को मुख्य() में सेट करें और एक अलग फ़ंक्शन का उपयोग करें जो स्थिर फ़ाइल अनुरोधों को संभालने से पहले एक वैध सत्र की जांच करता है।
- प्रासंगिक कोड स्निपेट (समस्याओं को संबोधित करने के बाद):
- // सत्र विकल्प सेट करें
स्टोर.विकल्प = &सत्र.विकल्प{
डोमेन: "लोकलहोस्ट",
पथ: "/",
अधिकतम आयु: 3600 * 8, // 8 घंटे
केवल Http: सत्य,
}
// `SessionHandler` में सत्र संचालन
func सेशनहैंडलर(res http.ResponseWriter, req *http.Request) {
सत्र, त्रुटि := स्टोर.गेट(अनुरोध, "लॉगिनसेशन")
यदि त्रुटि !=शून्य {
// त्रुटि को संभालें
}
// वैध सत्र की जांच करें
यदि सत्र.मान["ईमेल"] == शून्य {
http.रीडायरेक्ट(res, req, "html/login.html", http.StatusFound)
} अन्य {
http.रीडायरेक्ट(res, req, "html/home.html", http.StatusFound)
}
}