जरूरी नहीं कि राज्य की स्थिति खराब हो, लेकिन आपको स्टेटफुल और स्टेटलेस एप्स के बीच के अंतर को समझने की जरूरत है। संक्षेप में, स्टेटफुल ऐप्स वर्तमान सत्र के बारे में जानकारी बनाए रखते हैं, और स्टेटलेस ऐप नहीं करते हैं। उपयोगकर्ता खाते के भाग के रूप में स्थायी रूप से संग्रहीत जानकारी को एक सत्र में संग्रहीत किया जा सकता है या नहीं भी किया जा सकता है, लेकिन उपयोगकर्ता खाते से संबंधित जानकारी को संग्रहीत करना स्वयं आवेदन को स्टेटफुल नहीं बनाता है। स्टेटफुलनेस के लिए आवश्यक है कि सर्वर क्लाइंट ब्राउजर को बनाए रखने के अलावा वर्तमान उपयोगकर्ता के सत्र के बारे में जानकारी बनाए रखे। उदाहरण के लिए, एक ग्राहक प्रमाणित कर सकता है और उसे JSESSIONID कुकी दी जा सकती है, जिसे वह प्रत्येक अनुरोध के साथ सर्वर को भेजता है। यदि सर्वर इस JSESSIONID के आधार पर अनुप्रयोग के सत्र दायरे में सामान संग्रहीत करना शुरू करता है, तो यह स्टेटफुल हो जाता है।
statelessness
स्टेटलेस द्वारा, हमारा मतलब है कि सर्वर और क्लाइंट उपयोगकर्ता सत्र के बारे में वर्तमान जानकारी को बनाए नहीं रख रहे हैं। क्लाइंट और सर्वर अनुरोधों के बीच प्रमाणीकरण के लिए प्रदान करने के लिए टोकन के कुछ रूप का उपयोग कर सकते हैं, लेकिन कोई अन्य वर्तमान जानकारी संग्रहीत नहीं है। इस तरह के समाधान के लिए एक विशिष्ट उपयोग मामला एक समाचार साइट हो सकती है जहां अधिकांश उपयोगकर्ता (नए उपभोक्ता) जानकारी का उपभोग करते हैं, लेकिन साइट पर वापस जाने वाली जानकारी का उत्पादन नहीं करते हैं। ऐसे मामलों में, साइट को वर्तमान उपयोगकर्ता सत्र के बारे में कोई जानकारी बनाए रखने की आवश्यकता नहीं है। ध्यान दें कि साइट अभी भी कुकीज़ का उपयोग उपयोगकर्ता की पहचान करने और उस उपयोगकर्ता के साइट के उपयोग के बारे में जानकारी संग्रहीत करने के लिए कर सकती है, लेकिन इसे अभी भी स्टेटलेस माना जा सकता है क्योंकि रिकॉर्ड की गई हर चीज का लेन-देन किया जा सकता है, जैसे कि उपयोगकर्ता ने किस लिंक पर क्लिक किया, जिसे रिकॉर्ड किया जा सकता है सर्वर, लेकिन एक उपयोगकर्ता सत्र में बनाए रखा नहीं।
सर्वर पर स्थिति
सर्वर पर, एक स्टेटफुल ऐप वर्तमान उपयोगकर्ताओं के बारे में राज्य की जानकारी बचाता है। इस दृष्टिकोण में आम तौर पर उपयोगकर्ता की प्रणाली की पहचान करने के लिए कुकीज़ का उपयोग करना शामिल है ताकि अनुरोधों के बीच सर्वर पर स्थिति को बनाए रखा जा सके। आवेदन के संदर्भ के आधार पर सत्रों को प्रमाणित या नहीं किया जा सकता है। स्टेटफुल सर्वर एप्स सर्वर पर यूजर स्टेट की जानकारी कैच करने, लुक्स और पेज रिस्पॉन्स टाइम को तेज करने की सुविधा देते हैं। नीचे की तरफ, सत्र के दायरे में जानकारी संग्रहीत करना महंगा है, और बड़े पैमाने पर यह बहुत गहन संसाधन बन जाता है। यह हैकर्स के लिए एक संभावित अटैक वेक्टर भी बनाता है, जो सत्र के पहचानकर्ताओं को हाईजैक करने और उपयोगकर्ता सत्रों को चोरी करने के लिए बनाता है। स्टेटफुल सर्वर एप्स में अप्रत्याशित सेवा व्यवधानों के खिलाफ उपयोगकर्ता सत्र की सुरक्षा की चुनौती भी है, उदाहरण के लिए सर्वर विफलता।
ग्राहक पर राज्यवार प्रतिक्रिया
JavaScript और आधुनिक ब्राउज़र तकनीकों जैसे sessionStorage का उपयोग करके, एप्लिकेशन अब उस उपयोगकर्ता के डिवाइस पर उपयोगकर्ता सत्र के बारे में आसानी से राज्य की जानकारी संग्रहीत कर सकता है। कुल मिलाकर, एप्लिकेशन को अभी भी स्टेटफुल माना जा सकता है, लेकिन स्टेट को बनाए रखने का काम क्लाइंट के पास चला गया है। इस दृष्टिकोण का एक बड़ा फायदा है (वेब ऐप के रख-रखाव के लिए) सर्वर पर स्थिति बनाए रखने पर कि प्रत्येक उपयोगकर्ता प्रभावी रूप से, अपनी स्वयं की स्थिति बनाए रखता है, और सर्वर के बुनियादी ढांचे पर कोई बोझ नहीं है। वेब पैमाने पर, हार्डवेयर और बिजली की लागत के लिए इस तरह के वास्तुशिल्प विकल्प में भारी सुधार होते हैं। यह सचमुच सर्वर पर राज्य बनाए रखने के लिए लाखों डॉलर खर्च कर सकता है। क्लाइंट पर राज्य बनाए रखने वाले सिस्टम में जाने से एक वर्ष में लाखों डॉलर की बचत हो सकती है।
टोकन वी। कुकीज़
कुकीज़ क्लाइंट डिवाइस / ब्राउज़र के लिए पहचानकर्ता के रूप में कार्य करते हैं। उनका उपयोग सभी प्रकार की चीजों को स्टोर करने के लिए किया जा सकता है, लेकिन आम तौर पर वे पहचानकर्ता के कुछ रूप को स्टोर करते हैं, जैसे कि CFML / CFTOKEN CFML ऐप में। कुकीज़ को उपयोगकर्ता के ब्राउज़र में लंबे समय तक रहने के लिए सेट किया जा सकता है, जिससे ब्राउज़र सत्रों के बीच ऐप पर प्रमाणीकरण बनाए रखने जैसे काम करना संभव हो जाता है। कुकीज़ को मेमोरी में भी सेट किया जा सकता है-केवल इसलिए जब उपयोगकर्ता ब्राउज़र बंद करता है तो वे समाप्त हो जाते हैं।
टोकन आम तौर पर उस उपयोगकर्ता के बारे में जानकारी की पहचान करते हैं जो सर्वर पर उत्पन्न होते हैं (जानकारी का उपयोग करने के लिए एन्क्रिप्शन का उपयोग करते हुए), क्लाइंट को पास किया गया, और बाद के अनुरोध के साथ सर्वर पर वापस आ गया। उन्हें अनुरोध और प्रतिक्रिया के शीर्षलेख में पारित किया जा सकता है, जो एकल पृष्ठ अनुप्रयोगों में एक सामान्य पैटर्न है। आदर्श रूप से, प्रत्येक अनुरोध / प्रतिक्रिया के परिणामस्वरूप एक नया टोकन उत्पन्न होता है, इसलिए टोकन को किसी हमलावर द्वारा बाद में अवरोधन और उपयोग नहीं किया जा सकता है।
सिंगल पेज एप्स और क्लाइंट स्टेट
एसपीए के साथ, राज्य की जानकारी क्लाइंट ब्राउज़र में लोड की जाती है और वहां बनाए रखी जाती है। जब राज्य बदलता है, उदाहरण के लिए, आप अपने सोशल मीडिया खाते में एक अपडेट पोस्ट करते हैं, तो क्लाइंट उस नए लेनदेन को सर्वर पर निर्भर करता है। इस स्थिति में, सर्वर उस अपडेट को डेटाबेस की तरह लगातार डेटा स्टोर में सेव करता है, और क्लाइंट को जो भी जानकारी वापस मिलती है, उसे अपडेट के आधार पर सर्वर के साथ सिंक्रोनाइज़ करने की जरूरत होती है (उदाहरण के लिए अपडेट के लिए आईडी)।
ध्यान दें कि क्लाइंट पर स्टोर करने की यह स्थिति ऑनलाइन / ऑफ़लाइन अनुभवों के लिए लाभ प्रदान करती है जिसमें आप सर्वर से डिस्कनेक्ट हो सकते हैं जबकि अभी भी कुछ उपयोग करने योग्य अनुप्रयोग है। ट्विटर इस मामले का एक अच्छा उदाहरण है, जहां आप ट्विटर सर्वर ऐप से डिस्कनेक्ट होने पर भी अपने ट्विटर फीड में कुछ लोड किए गए क्लाइंट साइड की समीक्षा कर सकते हैं। यह पैटर्न सर्वर और क्लाइंट के बीच सिंक्रोनाइज़ेशन में भी जटिलता पैदा करता है, जो अपने आप में संपूर्ण विषय है। समाधान की जटिलताएं ग्राहक पर राज्य बनाए रखने में सक्षम होने के लिए एक व्यापार है।
क्लाइंट पर स्टेटिबिलिटी वेब ऐप्स को पारंपरिक डेस्कटॉप ऐप की तरह महसूस और व्यवहार करती है। डेस्कटॉप एप्लिकेशन के विपरीत, आपके पास आमतौर पर आपके खाते की सभी जानकारी एक ब्राउज़र में आपके क्लाइंट सत्र में लोड नहीं होगी। ऐसा करना कई मामलों में अव्यवहारिक होगा और बुरे अनुभव पैदा करेगा। क्या आप ब्राउज़र में संपूर्ण जीमेल बॉक्स को लोड करने की कोशिश कर सकते हैं? इसके बजाय, क्लाइंट इस बात की जानकारी रखता है कि आप किस लेबल / फ़ोल्डर को देख रहे हैं और उस फ़ोल्डर में ईमेल की सूची में आप कहाँ देख रहे हैं। संतुलन बनाए रखने के लिए राज्य सूचना को बनाए रखने और आवश्यकतानुसार अनुरोध करने के लिए इस पैटर्न की एक और इंजीनियरिंग चुनौती है, और फिर, यह व्यावहारिकता और अच्छे उपयोगकर्ता अनुभव प्रदान करने के बीच एक व्यापार का प्रतिनिधित्व करता है।
शॉपिंग कार्ट और पसंद है
शॉपिंग कार्ट जैसी विशिष्टताओं के लिए, यह वास्तव में समाधान पर निर्भर करता है। एक शॉपिंग कार्ट को सर्वर पर एक डेटाबेस में संग्रहीत किया जा सकता है, यह केवल सर्वर पर सत्र के दायरे में संग्रहीत किया जा सकता है, या इसे क्लाइंट में भी संग्रहीत किया जा सकता है। अमेज़ॅन के पास उपयोगकर्ताओं में लॉग इन के लिए लगातार खरीदारी की गाड़ियां हैं, और गुमनाम उपयोगकर्ताओं के लिए "अस्थायी" गाड़ियां हैं, हालांकि ये गाड़ियां कुछ हद तक लगातार हैं।
जब आप Google जैसी किसी चीज़ के बारे में बात करते हैं, जो वास्तव में एक ही ब्रांड के तहत रहने वाले विभिन्न अनुप्रयोगों का एक समूह है, तो वे संभवतः एक सामान्य वास्तुकला साझा नहीं करते हैं, और प्रत्येक उस तरीके से बनाया गया है जो अपने उपयोगकर्ताओं की आवश्यकताओं को पूरा करता है। यदि आप सीखना चाहते हैं कि कोई साइट कैसे बनाई जाती है, तो अपने ब्राउज़र में डेवलपर टूल खोलें और इसे देखें। कुकीज़ की जांच करें, नेटवर्क ट्रैफ़िक देखें और देखें कि यह कैसे चलता है।
क्षमा करें, यदि यह उत्तर थोड़ा सा विचलित करता है, लेकिन स्थिति एक जटिल विषय है।