2013-01-09 32 views
6

मैं जावा सर्वलेट विकसित कर रहा हूं। यह जांचने के बिंदु पर कि कोई उपयोगकर्ता लॉग इन है या नहीं, मैं यह जांचना चाहता हूं कि HTTP अनुरोध का वैध सत्र है या नहीं। कि जाँच के लिए, मैं 2 संभावनाएं हैं:मान्य सत्र की जांच करें: isRequestedSessionIdValid() बनाम getession (false)

(1)

protected void processRequest(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

    HttpSession session = request.getSession(false); 
    if (session != null) { 
     // user is logged in 
     ... 
    } 
} 

जब से मैं एक तर्क के रूप में झूठी गुजरती हैं, वहां बनाई अगर कोई वैध सत्र पहले से ही विद्यमान है कोई नया सत्र, और function return है शून्य, मैं क्या देख सकता हूँ।

या मैं कार्य करें:

(2)

if (request.isRequestedSessionIdValid()) { 
     // user is logged in 
     ... 
    } 

वहाँ कोई अंतर, किसी भी लाभ/नुकसान है? या दोनों कार्य समान या कम करते हैं?

उत्तर

10

फार्म जावाडोक

isRequestedSessionIdValid बूलियन isRequestedSessionIdValid() जांचता है कि क्या अनुरोध किया सत्र आईडी अभी भी मान्य है। यदि ग्राहक ने कोई सत्र आईडी निर्दिष्ट नहीं की है, तो यह विधि गलत लौटाती है।

रिटर्न: सत्य अगर इस अनुरोध के पास वर्तमान सत्र संदर्भ में वैध सत्र के लिए आईडी है; झूठी अन्यथा

तो समझ में दोनों एक जैसे हैं। लेकिन आपको इसके बारे में जागरूक होने की आवश्यकता है अनुरोध है .getSession (false) केवल कंटेनर के पहले अनुरोध के मामले में शून्य होगा। पहले अनुरोध कंटेनर के बाद एक सत्र बनाता है और प्रतिक्रिया के साथ जेएसएशनिड कुकी भेजता है, ताकि वह उसी ब्राउज़र से बाद के अनुरोधों को ट्रैक कर सके। तो आपके मामले में यह जांचने के बजाय कि सत्र शून्य है या नहीं, आपको सत्र विशेषता "is_logged_in" = सत्य संग्रहित करनी चाहिए और इस विशेषता के लिए भी जांच करनी चाहिए यदि सत्र शून्य नहीं है।

+3

+1 "पहले अनुरोध कंटेनर के बाद सत्र बनाता है और प्रतिक्रिया के साथ जेएसएशनिड कुकी भेजता है" – informatik01

1

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