JSESSIONID किन परिस्थितियों में बनाई गई है?


276

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

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

जवाबों:


324

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

सत्र प्रति संदर्भ हैं:

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

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

( सर्वलेट 2.4 विनिर्देश )

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


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

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

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

अभी सेशन बनाने के लिए मेरे फ़िल्टर पर कई हिट्स मिल रहे हैं और ऐसा लगता है कि दूसरे हिट के बाद ही (दूसरा पेज रिफ्रेश नहीं) इसके बनने के बाद, इसे मेरा ध्यान कहा जाता है "सत्र जरूरी नहीं कि पहले अनुरोध पर बनाया जाए .." यह संबंधित है क्या आप एक उदाहरण दे सकते हैं कि यह पहले अनुरोध पर क्यों नहीं बनाया गया है? धन्यवाद!
jpganz18

@ jpganz18: यदि आप बस कॉल करते हैं request.getSession()या करते हैं request.getSession(true), तो आपको मौजूदा या नया सत्र मिलता है। हालाँकि, यदि आपका कोड कॉल करता है request.getSession(false), तो आपको मौजूदा सत्र या शून्य मिलता है, यदि कोई सत्र मौजूद नहीं है।
पीटर 11:tibraný

49

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

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

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

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

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

<%@ page session="false" %>

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


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

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

23

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

एक "JSESSIONID" http सत्र की अद्वितीय आईडी है - यहां जावदोक देखें । वहां, आपको निम्नलिखित वाक्य मिलेगा

सत्र की जानकारी केवल वर्तमान वेब एप्लिकेशन (ServletContext) पर ही डाली जाती है, इसलिए एक संदर्भ में संग्रहीत जानकारी सीधे दूसरे में दिखाई नहीं देगी।

इसलिए जब आप पहली बार किसी साइट पर आते हैं, तो एक नया सत्र बनाया जाता है और सेवलेटकोटेक्स्ट के लिए बाध्य किया जाता है। यदि आप कई एप्लिकेशन परिनियोजित करते हैं, तो सत्र साझा नहीं किया जाता है।

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

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


1
सत्र के दायरे की स्पष्ट व्याख्या।
user3123690

@Mo लिंक टूट गया है
Timofey

8

यदि आपका पृष्ठ अन्य .jsp या .jspf (विखंडन) सहित है तो सावधान! यदि आप सेट नहीं करते हैं

<%@ page session="false" %>

उन पर भी, मूल पृष्ठ एक नया सत्र शुरू करने और JSESSIONID कुकी की स्थापना करेगा।

विशेष रूप से .jspf पृष्ठों के लिए, यह तब होता है जब आपने अपने वेब। Xml को इस तरह के स्निपेट से कॉन्फ़िगर किया हो:

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

उनके अंदर स्क्रिप्ट को सक्षम करने के लिए।


क्या आपका मतलब है कि पृष्ठ का सत्र = सभी टुकड़ों (.jsp और .jspf) में गलत है और इसे मुख्य jsp में शामिल नहीं करें जिसमें बाकी स्निपेट्स शामिल हैं?
ओम्मडॉन

2

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

<%@ page session="false" %>

JSP में

तथा

request.getSession().invalidate();

स्ट्रट्स एक्शन में

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.