2011-02-28 7 views
12

जावा सर्वलेट में HttpSession केवलजावा HttpSession

HttpSession s = request.getSession(); 

के बाद बनाई गई है है?

मेरे कोड में मैंने यह नहीं लिखा, लेकिन जब मैं if (request.getSession(false) == null) ... का उपयोग करता हूं, तो यह काम नहीं करता है। क्यूं कर?

+1

इसका मतलब क्या है 'यह काम नहीं करता है? क्या आपके पास अपवाद है? यदि आपका परीक्षण शून्य से कुछ अलग करता है तो इसका मतलब है कि सत्र पहले से मौजूद है और इसे नया बनाने के लिए जरूरी नहीं है। – reef

+0

तो आपको request.getSession (false) प्राप्त करें! = शून्य। कुछ और कोड के साथ हम आपकी मदद कर सकते हैं ... – PeterMmm

+0

मेरा मतलब है (request.getSession (false) == null) सत्य होना चाहिए, लेकिन यह गलत है, मुझे नहीं पता कि – Sergey

उत्तर

16

अनुरोध करते समय एक HttpSession बनाया जाता है .getSession()।<%@ page session="false">

आप JSP उपयोग कर रहे हैं:

लेकिन यदि आप डिफ़ॉल्ट रूप से एक JSP का उपयोग यह स्वचालित रूप से एक session.This व्यवहार पैदा करेगा का उपयोग करके निष्क्रिय किया जा सकता?

+0

बहुत बहुत धन्यवाद, इससे – Sergey

+0

मदद मिली, ऐसा लगता है कि यदि कोई अस्तित्व में है तो पेज अनुरोध से सत्र को भी हटा दें। –

+0

leif8: नहीं, यह मेरे लिए पृष्ठ से सत्र नहीं हटाता – peenut

0

ब्राउज़र से सत्र कुकीज़ को निकालने का प्रयास करें और एक और परीक्षण करें। यदि यह काम नहीं करता है तो कुछ अन्य घटक उस कॉल से पहले एक नया सत्र बना रहा है।

15

पढ़ें Javadocs, यह स्पष्ट रूप से कहते हैं:

यह कहते हैं, request.getSession()

इस अनुरोध के साथ जुड़े मौजूदा सत्र देता है, या यदि अनुरोध एक सत्र नहीं है, एक बनाता है।

और अन्य संस्करण request.getSession(isCreate)

वर्तमान इस अनुरोध के साथ जुड़े HttpSession रिटर्न या, अगर वहाँ कोई वर्तमान सत्र है और बनाने के सच है, एक नया सत्र देता है।

यदि निर्माण गलत है और अनुरोध के पास कोई मान्य HttpSession नहीं है, तो यह विधि शून्य हो जाती है।

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


अद्यतन

थोड़ा अनुसंधान पर, मैं पाया है सत्र है कि नहीं बनाया जब तक request.getSession()कहीं कहा जाता है। चूंकि, The servlet container uses this interface to create a session between an HTTP client and an HTTP server. अच्छी संभावना है कि आपके सर्वलेट कंटेनर डिफ़ॉल्ट रूप से आपके लिए सत्र बनाता है।

देखें:

  1. जावा डॉक्टर HttpSession
  2. चर्चा JavaRaunch पर: is HttpSession created automatically?

लेकिन, सुरक्षित पक्ष होने के लिए, request.getSession() का उपयोग सत्र पाने के लिए, और केवल आप जब request.getSession(false) का उपयोग यह सत्यापित करने की आवश्यकता है कि कोई सत्र पहले से ही बनाया गया है या नहीं।

+0

यही सवाल है। मैं कोई HttpSession नहीं बनाते हैं। मैं request.getSession() का उपयोग नहीं करता हूं। पहली बार जब मैं इसकी जांच करता हूं तो है (request.getSession (FALSE) == null) यह सच होना चाहिए, लेकिन यह – Sergey

+0

'request.getSession()' HTTP सत्र बनाने का एकमात्र तरीका नहीं है। – Nishant

+0

अन्य क्या हैं? – Sergey

3

निशांत के उत्तर के अलावा नोट कि जेएसपी पृष्ठों द्वारा सत्र को निश्चित रूप से बनाया जा सकता है जबतक कि आप उन्हें <%@ page session = "false" %> के साथ सत्र बनाने के लिए कॉन्फ़िगर नहीं करते हैं।

1

इसे पूरा करने के लिए:

  • सत्र नहीं बनाई गई है, जब तक आप, request.getSession() फोन अपने सर्वलेट में, request.getSession(false) उपयोग करें यदि आप JSP पेज का उपयोग नए सत्र
  • बनाए बिना मौजूदा सत्र प्राप्त करने के लिए, सत्र है स्वचालित रूप से आप के लिए बनाया - चर session - अगर यह नव
  • बना दिया गया है जब तक आप <%@ page session="false" %>
  • निर्दिष्ट भले ही आपके सत्र स्वचालित रूप से बनाया है, तो आप session.isNew() उपयोग कर सकते हैं पता लगाने के लिए,
संबंधित मुद्दे