2011-04-29 24 views
18

क्या वस्तुओं को क्रमबद्ध किया गया है और उपयोगकर्ता को भेजा गया है और प्रत्येक कनेक्शन (कुकीज़ में संग्रहीत) पर वापस भेजा गया है?जावा HttpSession विशेषताएँ कहाँ संग्रहित हैं?

या वे सर्वर ढेर में संग्रहीत हैं और कुकी केवल एक बहुत छोटा पहचानकर्ता है?

इस विषय के बारे में कोई भी जानकारी उपयोगी होगी।

धन्यवाद

+0

संबंधित: http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables/3106909#3106909 – BalusC

उत्तर

20

आपको इसे दूसरे अनुमान पर मिला।

कुकी में एक JSESSIONID है। उस आईडी का उपयोग उस मानचित्र में उपयोगकर्ता के HttpSession को देखने के लिए किया जाता है जो सर्वर बनाए रखता है। कम से कम यह सबसे आम तरीका है। सर्वर अधिक कार्यान्वित तरीके हैं कि सर्वर इसे कार्यान्वित कर सकता है, लेकिन पूरे राज्य को एक कुकी में आगे पीछे हटाना उनमें से एक नहीं है।

इसमें कुछ प्रभाव हैं। सबसे पहले, यदि सर्वर नीचे चला जाता है, तो आप सत्र स्थिति खो देते हैं। दूसरा, यदि आपके पास सर्वर क्लस्टर है, तो आपको प्रत्येक बार एक ही सर्वर से उपयोगकर्ता को कनेक्ट करने की आवश्यकता है, या वे बाद के अनुरोधों के बीच अपना सत्र खो देंगे। आखिरकार, सत्र अपहरण एक संभावना बन जाता है अगर किसी को किसी और के JSESSIONID की प्रतिलिपि बनाने और उनके साथ प्रतिस्थापित करने का कोई तरीका मिल जाए।

+0

क्या कोई सुरक्षित विकल्प हैं? –

+9

आपका अंतिम अनुच्छेद पूरी तरह से सटीक नहीं है। लोकप्रिय जावा वेब सर्वर (कम से कम टॉमकैट और जेबॉस) को डिस्क स्थिति को डिस्क पर जारी रखने के लिए कॉन्फ़िगर किया जा सकता है ताकि इसे किसी क्रैश या सर्वर पुनरारंभ पर संरक्षित किया जा सके। एक ही सर्वर क्लस्टर में सभी नोड्स के बीच साझाकरण सत्र स्थिति का भी समर्थन करता है ताकि उपयोगकर्ता क्लस्टर में अपने सत्र को खोए बिना किसी भी नोड को हिट कर सके (और यदि क्लस्टर नोड नीचे चला जाता है, तो उपयोगकर्ता अपने सत्र को एक अलग नोड के साथ जारी रख सकता है जैसे कि कुछ भी नहीं हुआ है)। – aroth

+3

@aroth - आप सही हैं। मेरा दूसरा अनुच्छेद टॉमकैट में सबसे आम तरीके से सत्रों को संभालने के मुद्दों का जिक्र कर रहा था, खासकर जब यह बॉक्स से बाहर आता है (इसलिए कहने के लिए)। मैंने उपलब्ध अधिक जटिल प्रणालियों के बारे में बताया, लेकिन यह नहीं सोचा कि इस प्रश्न को लगातार/साझा सत्रों की सभी जटिलताओं में गहरी गोता लगाने की आवश्यकता है। यदि आप मूल प्रश्न को देखते हैं, तो यह सब पूछताछ कर रहा था कि कुकीज़ सत्र सत्र के लिए कैसे काम करती है। मैंने जानबूझकर सभी अलग-अलग संभावनाओं को छोड़ दिया। – rfeak

5

कुकी में केवल सत्र पहचानकर्ता होता है (आमतौर पर JSESSIONID कहा जाता है)। सर्वर इस पहचानकर्ता को उपयोगकर्ता के सत्र में वर्तमान में संग्रहीत डेटा के लिए मानचित्र करता है।

डेटा को स्मृति में संग्रहीत किया जा सकता है, या इसे डेटाबेस के लिए क्रमबद्ध किया जा सकता है या आप जिस सर्वर का उपयोग कर रहे हैं और इसकी कॉन्फ़िगरेशन के आधार पर फ़ाइल कर सकते हैं।

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