जैसा कि हम जानते हैं कि वेब एप्लीकेशन एचटीटीपी प्रोटोकोल का उपयोग सूचना के आदान-प्रदान के लिए करते हैं लेकिन सूचना का स्टेट अर्थात इन्फॉर्मेशन की स्थिति स्थायी नहीं होती। जब ब्राउज़र द्वारा किसी सूचना को एचटीटीपी प्रोटोकॉल के अंतर्गत सर्वर पर भेजा जाता है तो उस सूचना को सर्वर द्वारा प्राप्त करने के उपरांत उसको सर्वर द्वारा संचित/स्टोर करके नहीं रखा जाता क्योंकि एचटीटीपी प्रोटोकोल एक स्टेटलेस प्रोटोकॉल है। स्टैटलेस प्रोटोकोल होने के कारण सूचना टिकाऊ नहीं होती, अतः उसे टिकाऊ बनाने के लिए asp.net टेक्नोलॉजी के अंतर्गत कुछ तकनीक का उपयोग किया जाता है जैसे ViewState, Cookie, Hidden field, Session, Application, Cache, Profiling इत्यादि।
Two Types of State Management
Asp.net के अंतर्गत स्टेट मैनेजमेंट के लिए दो प्रकार के तकनीक का उपयोग किया जाता है- पहला, क्लाइंट साइड स्टेट मैनेजमेंट टेक्निक और दूसरा, सर्वर साइड स्टेट मैनेजमेंट टेक्निक।
सर्वर साइड स्टेट मैनेजमेंट के लिए Session, Application, Caching और Profiling का उपयोग किया जाता है जबकि क्लाइंट साइड स्टेट मैनेजमेंट के लिए Query string, ViewState, Cookie, Hidden field इत्यादि का।
Cookie as state management technique
Cookie से अभिप्राय छोटे साइज के डाटा या इंफॉर्मेशन से है जिसको सर्वर द्वारा क्लाइंट मशीन पर रखा जाता है और उस इंफॉर्मेशन का बार बार उपयोग सर्वर द्वारा किया जाता है। वस्तुतः Cookie का निर्माण सर्वर मशीन द्वारा किया जाता है लेकिन ध्यान रखने वाली बात यह है कि इसका निर्माण क्लाइंट मशीन पर किया जाता है। दूसरे शब्दों में, Cookie का निर्माण सर्वर मशीन द्वारा क्लाइंट मशीन पर छोटे साइज के डाटा को स्टोर करने के लिए किया जाता है, जिसका बार-बार उपयोग सर्वर मशीन द्वारा किया जाता है और इस डाटा को क्लाइंट/ब्राउज़र द्वारा रिक्वेस्ट भेजने के दौरान अन्य सूचनाओं के साथ-साथ Cookie के इंफॉर्मेशन को ही भेज दिया जाता है।
Cookie दो प्रकार का होता है-
Persistent Cookie
Non Persistent Cookie
जैसा की Cookie क्लाइंट मशीन पर स्टोर किया जाता है लेकिन इस को क्रिएट करने के दो तकनीक है। पहला तरीका तो यह है कि किसी टेक्स्ट फाइल के भीतर Cookie के इंफॉर्मेशन को स्टोर किया जाए और दूसरा तरीका यह है कि ब्राउज़र के मेमोरी के भीतर ही Cookie के इंफॉर्मेशन को स्टोर कर लिया जाए।
जब Cookie के इंफॉर्मेशन को किसी टेस्ट फाइल के भीतर स्टोर करके रखा जाता है तो इसे परसिस्टेंट Cookie कहते हैं। इसका फायदा यह होता है कि इसको लंबे समय के लिए स्टोर करके रखा जा सकता है जबकि ब्राउज़र के मेमोरी के भीतर Cookie को स्टोर करके रखने पर मेमोरी की सीमा का ध्यान रखना पड़ता है।
जैसा की Cookie के इंफॉर्मेशन को क्लाइंट मशीन पर रखा जाता है, अतः किसी भी प्रकार के संवेदनशील या गुप्त डाटा को Cookie के रूप में क्लाइंट मशीन पर स्टोर करके नहीं रखा जाता है। अतः Cookie की सीमा यह है कि Cookie के भीतर किसी प्रकार का संवेदनशील या गोपनीय डाटा नहीं रखना चाहिए। लेकिन कुकी का लाभ यह है कि इसके कारण सर्वर resource की बचत होती है क्योंकि कुकी ब्राउज़र मशीन में स्टोर किया जाता है।
दूसरी बात यह भी है कि आमतौर पर Cookie की एक्सपायरी डेट भी तय की जाती है इस समय के बाद Cookie में स्टोर किए गए सारे इंफॉर्मेशन समाप्त हो जाते हैं।
asp.net टेक्नोलॉजी के अंतर्गत किसी Cookie के निर्माण के लिए HttpCookie का उपयोग किया जाता है। HttpCookie क्लास के ऑब्जेक्ट को बनाने के लिए New ऑपरेटर का उपयोग किया जाता है। आमतौर पर Cookie का नाम HttpCookie के पैरामीटर के रूप में दे दिया जाता है। जब एक Cookie का ऑब्जेक्ट तैयार होता है तो उसके प्रॉपर्टीज को भी सेट कर दिया जाता है। Cookie से संबंधित कई प्रकार के प्रॉपर्टीज है, उदाहरण के लिए, Cookie के एक्सपायरी से संबंधित expires प्रॉपर्टी है। जब कोई Cookie तैयार किया जाता है तो उसको Request ऑब्जेक्ट की प्रॉपर्टी के साथ बाँध कर उस Request ऑब्जेक्ट के Cookies कलेक्शन के भीतर add कर दिया जाता है। इसी प्रकार Response ऑब्जेक्ट के साथ भी Cookies कलेक्शन है और उसके साथ भी हम किसी Cookie को रेफर कर सकते हैं। Cookie को रेफर करने के लिए हम ऐसी हालत में Cookie के नाम का प्रयोग करते हैं।
Session as state management technique
Asp.net टेक्नोलॉजी के अंतर्गत स्टेट मैनेजमेंट के Session का उपयोग किया जाता है। Session सर्वर साइड स्टेट मैनेजमेंट टेक्निक है। इसका अर्थ यह है कि सेसन से सम्बंधित इन्फॉर्मेशन सर्वर पर संचित की जाती है। आमतौर पर Session का उपयोग किसी यूज़र के सेशन को मैनेज करने के लिए किया जाता है। तात्पर्य है कि जब कोई यूजर किसी वेब एप्लीकेशन को यूज करता है तो उससे संबंधित इंफॉर्मेशन जैसे यूजरनेम और पासवर्ड जैसी तमाम जानकारियों को Session के भीतर स्टोर करके रखा जाता है। Session के भीतर इस प्रकार के इंफॉर्मेशन को संचित कर के करना चाहिए जो संवेदनशील अथवा गोपनीय प्रकृति के हैं। उदाहरण के लिए, यूजर नेम और पासवर्ड, इस तरह के इंफॉर्मेशन को क्लाइंट साइड स्टेट मैनेजमेंट टेक्निक जैसे Cookie के अंतर्गत नहीं रखना चाहिए।
प्रत्येक यूजर जो अप्लीकेशन को अलग अलग मशीन से यूज करता है उसके लिए अलग से पृथक Session क्रिएट होता है और प्रत्येक Session की अपनी एक आईडी होती है जिसे SessionId कहते हैं और यह 128-bit का होता है। डॉट नेट के अंतर्गत Session से जुड़े इवेंट्स भी होते हैं जो global.asax फाइल के भीतर इवेंट हैंडलर सब रूटीन के रूप में होते हैं। ये इवेंट्स दो प्रकार के हैं- Session_OnStart() और Session_OnEnd()
जैसा कि नाम से ही स्पष्ट है कि जब उसे से स्टार्ट होता है तो सेशन स्टार्ट होने पर जो सेशन इवेंट occur होता है वह Session_OnStart इवेंट है इसी प्रकार जब किसी यूज़र का सेशन समाप्त होता है तब Session_OnEnd इवेंट फायर होता है।
Session is a collection
Session के संबंध में यह बात समझने लायक है कि Session एक प्रकार का कलेक्शन है और प्रत्येक यूजर के सेशन से सम्बंधित अनेकानेक इन्फॉर्मेशन को Session कलेक्शन के भीतर रखा जाता है।
Session के इन्फॉर्मेशन विभिन्न प्रकार के datatypes हो सकते हैं लेकिन वे स्ट्रिंग के रूप में Session के भीतर स्टोर किए जाते हैं। अतः सेशन के किसी डाटा को यूज करने से पूर्व उसे तत्सम्बन्धी datatype में आवश्यकता अनुसार convert कर लेना चाहिए। इसके लिए कंवर्सन फंक्शन यूज करने चाहिए।
Saving session in web.config file
सेशन को किसी एप्लीकेशन के web.config वेब कॉन्फ़िग फाइल में स्टोर करने के लिए Session State टैग का उपयोग करना पड़ता है। SessionState टैग के कई सारे एट्रिब्यूट्स है जैसे mode, timeout इत्यादि।
Timeout
जब कोई यूजर किसी एप्लीकेशन को यूज करता है तो उसकी Session निर्मित होती है लेकिन अगर एक निश्चित अंतराल तक वह एप्लीकेशन यूज नहीं करता है, जैसे मान लीजिए 20 मिनट तक यूजर ने एप्लीकेशन को यूज नहीं किया, तो उसकी सेशन खत्म हो जाती है। कितने समयान्तराल के बाद यूजर का सेशन एक्सपाइर होगा यह timeout के मान पर निर्भर करता है। सेशन को टाइमआउट के द्वारा नियंत्रित किया जाता है। अगर सेशन का timeout 30 मिनट्स है तो 30 मिनट के बाद सेशन एक्सपायर्ड हो जाएगा। सेशन का timeout सिक्युरिटी के दृष्टिकोण से बहुत ही महत्त्वपूर्ण स्थान रखता है। अगर कोई यूजर एप्लिकेशन से लॉगआउट करना भूल जाये तो एप्लिकेशन स्वतः ही निर्धारित timeout के बाद लॉगआउट हो जाता है।
SessionState टैग से जुड़ा एक महत्वपूर्ण attribute mode है जो यह नियंत्रित करता है कि सेशन का मान किस जगह/तरह स्टोर होगा। mode का मान
InProc, StateServer, SqlServer, Custom और off होता है। InProc का अभिप्राय यह है कि सेशन वर्तमान प्रोसेस/मेमोरी के अधीन ही स्टोर होगा। प्रोसेस के समाप्त होने के बाद सेशन भी समाप्त हो जाएगा। StateServer मोड का अभिप्राय यह है कि application के restart होने पर भी सेशन का डाटा उपलब्ध रहेगा। SqlServer मोड का अभिप्राय यह है कि सेशन का डाटा SQLServer पर स्टोर होगा। इसी तरह, off का अर्थ है कि सेशन का डेटा सर्वर पर स्टोर नहीं किया जायेगा। जब बहुत अधिक यूजर्स किसी वेब एप्लिकेशन को यूज करते हैं तो ऐसी स्थिति में SqlServer मोड का उपयोग किया जाता है। Custom मोड का उपयोग तब करते हैं जब सेशन के इन्फॉर्मेशन को किसी अन्य तरह के data storage में स्टोर करना हो। ऐसी स्थिति में उस data source के connection स्ट्रिंग और provider को अवश्य देना होगा।
Methods and Properties of Session
ASP.net के अंतर्गत सेशन ऑब्जेक्ट के कुछ महत्त्वपूर्ण प्रॉपर्टीज और मेथडस है वे इस प्रकार हैं- अगर आप किसी Session को समाप्त करना चाहते हैं तो उसके लिए तीन तरीके हैं
१) पहला तरीका यह है कि यूजर ब्राउज़र एप्लीकेशन को क्लोज कर दे।
२) दूसरा तरीका यह है कि निर्धारित टाइमआउट तक यूजर इनएक्टिव रहें तो सेशन अपने आप ही समाप्त हो जाता है।
३) तीसरा तरीका Abandon() method है। इसका उपयोग कर भी हम किसी Session को समाप्त कर सकते हैं।
सेशन के भीतर स्थित इंफॉर्मेशन को नष्ट करने के लिए Clear() का उपयोग किया जाता है।
सेशन के तीन महत्त्वपूर्ण प्रॉपर्टीज है जैसे
IsReadOnly यह बताता है कि सेशन का डाटा रीड ओनली मोड में है या नहीं
IsNewSession इसी तरह इज न्यू सेशन प्रॉपर्टी बताता है कि सेशन नया या पुराना है।
IsCookieless यह प्रॉपर्टी बताता है कि Session का डाटा किसी Cookie के भीतर स्टोर होगा अथवा नहीं।
Asp.net के अंतर्गत हमने Session और Cookie के उपयोग को देखा कि कैसे इनका उपयोग स्टेट मैनेजमेंट के लिए किया जाता है सेशन के संबंध में यह कह सकते हैं कि जब अलग अलग मशीन से वेब एप्लीकेशन यूजर्स यूज करते हैं तो प्रत्येक यूजर के लिए अलग अलग सेशन क्रिएट होता है। इसी तरह जब एक ही मशीन के अलग अलग ब्राउज़र से यूजर एप्लिकेशन को access करता है तो अलग अलग सेशन निर्मित होता है। कहने का तात्पर्य है कि उनके डाटा को अलग-अलग स्टोर करके रखा जाता है।
Application as state management technique
अब मान लीजिए कि किसी भी वेव एप्लिकेशन को कई सारे यूजर्स यूज कर रहे हैं और हम किसी पार्टिकुलर यूजर का डाटा ना स्टोर कर बल्कि ऐसे डेटा को स्टोर करना चाहते हैं जो पूरे एप्लीकेशन पर लागू होता हो तो इस प्रकार के डाटा को स्टोर करने के लिए हम Application का यूज़ करते हैं। Application एक सर्वर साइड स्टेट मैनेजमेंट टेक्निक है जिसका उपयोग कर एप्लीकेशन से जुड़े हुए डाटा को स्टोर करके रखा जाता है। यह डाटा तब तक बना रहता है जब तक application रन करता रहता है। जब तक एप्पलीकेशन रन होगा तब तक Application डाटा एप्लिकेशन के मेमोरी में रहेगा। जब एप्लीकेशन डाउन होगा तब उस Application का डाटा नष्ट होगा। Application डाटा को प्रत्येक यूजर द्वारा प्रत्येक पेज पर यूज किया जा सकता है। एप्लिकेशन से सम्बंधित इवेंट हैंडलर्स को Global.asax फ़ाइल में डिफाइन किया जाता है।
Application_Start और Application_End नामक इवेंट इस फ़ाइल में होते हैं जो Application के data को यूज करते हैं।
यदि दो यूजर्स एक ही समय किसी Application के data को access करेंगे तब Application को lock करना होगा। यह concurrency से जुड़ा विषय है।
Application.Lock()
Application.Unlock()
लेखक अजीत कुमार २८/८/२०२१
© अजीत कुमार, सर्वाधिकार सुरक्षित।
इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।
No comments:
Post a Comment