2009-02-27 14 views
230

जब JSESSIOINID बनाया गया है तो कब/क्या स्थितियां हैं?एक JSESSIONID किस स्थितियों के तहत बनाया गया है?

क्या यह एक डोमेन है? उदाहरण के लिए, यदि मेरे पास टॉमकैट ऐप सर्वर है, और मैं कई वेब अनुप्रयोगों को तैनात करता हूं, तो एक अलग JSESSIONID प्रति संदर्भ (वेब ​​एप्लिकेशन) बनाया जाएगा, या जब तक वे एक ही डोमेन हैं, तब तक यह वेब अनुप्रयोगों में साझा किया जाता है?

उत्तर

267

सत्र बनाते समय JSESSIONID कुकी बनाया/भेजा जाता है। सत्र तब बनाया जाता है जब आपका कोड पहली बार request.getSession() या request.getSession(true) पर कॉल करता है। यदि आप बस सत्र प्राप्त करना चाहते हैं, लेकिन यदि यह अस्तित्व में नहीं है, तो इसे बनाएं, request.getSession(false) का उपयोग करें - यह आपको एक सत्र या null वापस कर देगा। इस मामले में, नया सत्र नहीं बनाया गया है, और JSESSIONID कुकी नहीं भेजी गई है।

सत्र हैं (यह भी मतलब है कि सत्र जरूरी पहली अनुरोध पर नहीं बनाया है ... आप और आपके कोड नियंत्रण जब सत्र बनाई गई है में हैं) प्रति-संदर्भ:

SRV.7.3 सत्र स्कोप

HttpSession वस्तुओं आवेदन (या servlet संदर्भ) स्तर पर scoped किया जाना चाहिए। अंतर्निहित कार्यप्रणाली, जैसे सत्र स्थापित करने के लिए प्रयोग किया जाता कुकी के रूप में, विभिन्न संदर्भों के लिए एक ही हो सकता है, लेकिन ऑब्जेक्ट का संदर्भ दिया, कि वस्तु में विशेषताओं सहित, कंटेनर द्वारा संदर्भों के बीच साझा नहीं करना चाहिए।

(Servlet 2.4 specification)

अद्यतन: JSP पेज को हर कॉल परोक्ष एक नया सत्र बनाता है अगर वहाँ अभी तक कोई सत्र है। इसे session='false' पृष्ठ निर्देश के साथ बंद कर दिया जा सकता है, जिसमें केस जेएसपी पृष्ठ पर सत्र चर उपलब्ध नहीं है।

+1

सत्र प्राप्त करने के लिए एक सत्र को एक सत्र बनाया जा सकता है? "कंटेनर द्वारा संदर्भों के बीच कभी साझा नहीं किया जाना चाहिए" के संबंध में, वेबस्पेयर के पास सत्र साझा करने का विकल्प होता है, जो प्रश्न के लिए प्रेरणा है :) – joshjdevl

+0

यदि आप केवल Servlet API का उपयोग नहीं करते हैं। सर्वर-विशिष्ट एक्सटेंशन हो सकते हैं (जैसे वेबस्पेयर के सत्र साझाकरण जैसे आप इंगित करते हैं)। –

+0

मेरा मानना ​​है कि आपकी context.xml फ़ाइल स्वचालित सत्र निर्माण को नियंत्रित कर सकती है यदि आपके टैग में एक कुकी विशेषता है, उदा। <संदर्भ कुकीज़ = "झूठी"> –

16

सुधार: कृपया पीटर Štibraný के उत्तर के लिए वोट दें - यह अधिक सही और पूर्ण है!

एक "JSESSIONID" http सत्र - see the javadoc here की अनूठी आईडी है। जावाडोक में आपको निम्न वाक्य मिल जाएगा: "सत्र की जानकारी केवल वर्तमान वेब एप्लिकेशन (ServletContext) पर स्कॉप्ड की जाती है, इसलिए एक संदर्भ में संग्रहीत जानकारी सीधे किसी अन्य में दिखाई नहीं देगी।"

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

आप वर्तमान सत्र को भी अमान्य कर सकते हैं और इसलिए एक नया बना सकते हैं। जैसे जब http से https (लॉगिन के बाद) में स्विच करते समय, नया सत्र बनाने के लिए, यह एक बहुत अच्छा विचार है।

आशा है, यह आपके प्रश्न का उत्तर देगा।

+1

सत्र स्कोप की स्पष्ट व्याख्या। – user3123690

+0

@ क्या लिंक टूटा हुआ है – Tim

37

यहाँ JSESSIONID कुकी का एक और स्रोत के बारे में कुछ जानकारी है:

मैं बस कुछ जावा कोड है कि एक बिल्ला सर्वर पर चलाता है डिबगिंग किया गया था। मैं अपने कोड में स्पष्ट रूप से कहीं भी request.getSession() पर फोन नहीं कर रहा था, लेकिन मैंने देखा कि JSESSIONID कुकी अभी भी सेट की जा रही थी।

अंत में मैंने टॉमकैट के तहत कार्य निर्देशिका में जेएसपी के अनुरूप जेनरेट किए गए जावा कोड पर एक नज़र डाली।

ऐसा प्रतीत होता है कि, चाहे आप इसे पसंद करते हैं या नहीं, अगर आप सर्वलेट से जेएसपी का आह्वान करते हैं, तो JSESSIONID बनाया जाएगा!

जोड़ा गया: मैं बस में पाया गया कि निम्नलिखित JSP निर्देश जोड़कर:

<%@ page session="false" %> 

आप एक JSP द्वारा JSESSIONID की सेटिंग को अक्षम कर सकते हैं।

+3

दूसरे शब्दों में: पृष्ठ सत्र विशेषता के लिए डिफ़ॉल्ट मान "सत्य" है। कुछ (कई?) मामलों में कौन सा अप्रत्याशित हो सकता है। –

+0

मैं टॉमकैट पर भी हूं, और मैं बिल्कुल जेएसपी का उपयोग नहीं करता हूं, लेकिन सत्र कुकी को वैसे भी बनाया जाता है। इस स्थिति में इसे रोकने के लिए कोई विचार है? – ClassyPimp

1

कस्टम टैग के साथ एक JSP में उत्पन्न लिंक के लिए, मैं

और

request.getSession().invalidate(); 
Struts में

कार्रवाई

7

JSP में

<%@ page session="false" %> 

उपयोग करने के लिए खबरदार अगर था आपके पृष्ठ में अन्य .jsp या .jspf (खंड) शामिल है! आप

<%@ page session="false" %> 
उन पर

निर्धारित नहीं करते हैं और साथ ही, माता पिता के पेज एक नया सत्र शुरू करने और jsessionid कुकी सेट खत्म हो जाएगा।

विशेष रूप से .jspf पृष्ठों के लिए, यह अगर आप इस तरह के एक टुकड़ा के साथ अपने web.xml कॉन्फ़िगर किया गया होता है:

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jspf</url-pattern> 
    </jsp-property-group> 
</jsp-config> 

ताकि उन्हें अंदर scriptlets सक्षम करने के लिए।

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