2012-02-27 13 views
8

सत्र ऑब्जेक्ट पर isNew() को कॉल करने से कैसे, यह जांचें कि सत्र एक नया है या पहले से उपयोग में है या नहीं?नया कैसे है() बताएं कि क्या सत्र एक नया है या पहले से उपयोग में है?

मैंने पढ़ा है कि isNew() सच है यदि ग्राहक ने सत्र आईडी के साथ अभी तक जवाब नहीं दिया है। लेकिन इसका मतलब क्या है ? कृपया

+0

आपका प्रश्न किस वर्ग का संदर्भ देता है? –

+0

@ एंड्रयू लॉगविनोव संपादित करें –

+0

सत्रों के काम को समझने के लिए इसे पढ़ें: http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation- सत्र- variables-and-multithreading – BalusC

उत्तर

20

मैंने पढ़ा है कि नया() सही है यदि क्लाइंट ने सत्र आईडी के साथ अभी तक जवाब नहीं दिया है। लेकिन इसका मतलब क्या है ?

ध्यान दें कि सर्वर वर्तमान में अनुरोध संसाधित कर रहा है। सत्र हैंडलिंग के संबंध में दो परिदृश्य हैं।

  • नए सत्र परिदृश्य में, सर्वर द्वारा उपयोगकर्ता/क्लाइंट के लिए एक नया सत्र बनाया जा रहा है। (क्लाइंट ने अनुरोध में कोई सत्र आईडी नहीं दी हो सकती है, या हो सकता है कि सर्वर ने सोचा कि एक सत्र आईडी प्रदान की गई हो, जो सर्वर सोचता है अमान्य है।) सर्वलेट का एप्लिकेशन कोड एक सत्र की आवश्यकता है (उदाहरण के लिए क्योंकि इसमें कुछ जानकारी है जो वह चाहता है वहां स्टोर करें), और इसे "उपस्थित नहीं होने पर बनाएं" ध्वज के साथ लाने का प्रयास करता है। सर्वलेट इंफ्रास्ट्रक्चर को पता चलता है कि कोई मौजूदा सत्र नहीं है, एक नया सत्र आईडी के साथ एक नया बनाता है, और इसे सत्र स्टोर में सहेजता है। अनुरोध पूरा होने पर, सत्र आईडी क्लाइंट को वापस कर दी जाती है; जैसे एक कुकी के रूप में, या सत्र आईडी संलग्न यूआरएल के रूप में।

  • मौजूदा सत्र परिदृश्य में, ग्राहक ने अनुरोध में सत्र आईडी शामिल की है; जैसे सत्र कुकी के रूप में, या अनुरोध URL में सत्र आईडी के रूप में। सर्वलेट इंफ्रास्ट्रक्चर इस आईडी को पहचानता है, इसे अपने सत्र स्टोर में देखता है और (यदि आवश्यक हो) HttpSession ऑब्जेक्ट को पुन: प्रयास करता है जिसमें सत्र स्टोर से पुनर्प्राप्त सत्र स्थिति होती है। जब सर्वलेट का एप्लिकेशन कोड सत्र तक पहुंचने का प्रयास करता है, तो यह HttpSession ऑब्जेक्ट प्राप्त करता है, न कि नया। तब सत्र स्थिति को सर्वलेट द्वारा उपयोग और अद्यतन किया जा सकता है क्योंकि यह अनुरोध को संसाधित करता है।

पहले परिदृश्य में, सत्र वस्तु पर isNew() बुला true वापस आ जाएगी, क्योंकि यह एक नया सत्र है।

दूसरे परिदृश्य में, सत्र ऑब्जेक्ट पर isNew() पर कॉल करने से false वापस आ जाएगा क्योंकि यह एक नया सत्र नहीं है।

सत्र ऑब्जेक्ट पर कॉलिंग नया() कैसे है, यह जांचें कि सत्र एक नया है या पहले से उपयोग में है या नहीं?

सर्वलेट आधारभूत संरचना जानता है कि दो परिदृश्यों में से कौन सा परिदृश्य हुआ क्योंकि सत्र सत्र या सत्र लुकअप हुआ। isNew() का सबसे स्पष्ट कार्यान्वयन HttpSession ऑब्जेक्ट में private boolean फ़ील्ड को शामिल करना है, और isNew() के परिणामस्वरूप उस फ़ील्ड का मान वापस कराना है। फील्ड ऑब्जेक्ट प्राप्त करने के तरीके के अनुसार क्षेत्र को सर्वलेट आधारभूत संरचना द्वारा शुरू किया जाएगा।

+2

मेरे पास नहीं है आपके उत्तर का एक हिस्सा समझा। क्या आप अंक को और स्पष्ट कर सकते हैं। –

+3

मैं आपके उत्तर के हर हिस्से को पूरी तरह से समझता हूं, इसे लिखने के लिए धन्यवाद। – user1884155

संबंधित मुद्दे