4.1 एचटीटीपी सत्र का परिचय

यदि एक ही क्लाइंट से कई अनुरोध आते हैं, तो वे कहते हैं कि क्लाइंट और सर्वर के बीच एक सत्र स्थापित हो गया है। इस प्रक्रिया को नियंत्रित करने के लिए, कंटेनर में एक विशेष HttpSession ऑब्जेक्ट होता है।

जब कोई क्लाइंट सर्वलेट के लिए अनुरोध करता है, तो सर्वलेट कंटेनर यह देखने के लिए जांच करता है कि अनुरोध में सत्र आईडी पैरामीटर मौजूद है या नहीं। यदि ऐसा कोई पैरामीटर नहीं है (उदाहरण के लिए, क्लाइंट पहली बार सर्वर से संपर्क कर रहा है), तो सर्वलेट कंटेनर एक नया HttpSession ऑब्जेक्ट बनाता है और इसे एक विशिष्ट आईडी भी प्रदान करता है।

सत्र ऑब्जेक्ट सर्वर पर संग्रहीत होता है, और क्लाइंट को प्रतिक्रिया में आईडी भेजी जाती है, और डिफ़ॉल्ट रूप से क्लाइंट पर कुकी में संग्रहीत होती है। फिर, जब एक ही ग्राहक से एक नया अनुरोध आता है, सर्वलेट कंटेनर आईडी को पुनर्प्राप्त करता है, और उस आईडी से सर्वर पर सही HttpSession ऑब्जेक्ट पाता है।

आप अनुरोध (एक HttpServletRequest ऑब्जेक्ट) से सत्र ऑब्जेक्ट प्राप्त कर सकते हैं, जिस पर आपको getSession() विधि को कॉल करने की आवश्यकता है। यह एक HttpSession ऑब्जेक्ट देता है।

सत्र की आवश्यकता क्यों है? यह कॉल के बीच क्लाइंट के बारे में जानकारी स्टोर कर सकता है। उसके अंदर हैश मैप जैसा कुछ है, जिसमें आप चाबियों से वस्तुओं को स्टोर कर सकते हैं। और इसके लिए कुछ तरीके:

तरीकों विवरण
1 setAttribute(String name, Object o) सत्र में एक वस्तु जोड़ता है
2 getAttribute(String name) सत्र से एक वस्तु प्राप्त करता है
3 removeAttribute(String name) सत्र से किसी वस्तु को निकालता है

आइए एक सर्वलेट लिखते हैं जो विभिन्न अनुरोधों से प्राप्त सभी संख्याओं को जोड़ देगा:

public class CalculatorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         // Get the "sum" attribute from the session
        HttpSession session = request.getSession();
        Integer sum = (Integer) session.getAttribute("sum");
        //Handling the situation when the session does not yet have such an attribute
        if (sum == null)
            sum = 0;

         // Get the "n" parameter from the request
        String n = request.getParameter("n");
        sum += Integer.parseInt(n);

         // Write the "sum" attribute to the session
        session.setAttribute("sum", sum);

        // Print the HTML as a response to the browser
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head> <title> CalculatorServlet </title> </head>");
        out.println("<body>");
        out.println("<h1> Sum == " + sum + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

4.2 एचटीटीपी सत्र के बारे में अधिक जानकारी

क्या कुछ और है जो हमने HttpSession ऑब्जेक्ट के बारे में नहीं कहा है?

सबसे पहले, यह जे सत्र आईडी नाम है । इसके अंतर्गत ही सेशन आईडी को कूकीज में स्टोर किया जाता है। जैसा कि आप देख सकते हैं, इसे याद रखना बहुत आसान है: J+SESSION+ID.

दूसरे, सत्र में कुछ और उपयोगी विधियाँ हैं:

तरीकों विवरण
1 getAttributeNames() सत्र में संग्रहीत सभी कुंजियों की सूची लौटाता है
2 getId() सत्र आईडी लौटाता है (स्ट्रिंग)
3 isNew() यदि सत्र ऑब्जेक्ट वर्तमान अनुरोध में बनाया गया था तो सत्य वापस आ जाता है
4 setMaxInactiveInterval(int seconds) सेकंड में सत्र निष्क्रियता अंतराल सेट करता है
5 invalidate() सत्र से सभी वस्तुओं को हटा देता है

यहां सभी तरीके स्पष्ट हैं, लेकिन setMaxInactiveInterval()हम थोड़ी और बात करेंगे।

यदि सर्वर हजारों सत्रों को संग्रहीत करता है, जिसमें पिछले महीने आने वाले ग्राहकों का डेटा भी शामिल है, तो यह बस मेमोरी से बाहर चला जाएगा। इसलिए, "सत्र जीवनकाल" सेट करने का एक तरीका है।

यदि किसी ने समय के अंतराल के लिए सत्र का उपयोग नहीं किया है, तो यह स्वयं को साफ़ करता है - इसमें संग्रहीत सभी ऑब्जेक्ट हटा दिए जाते हैं। यह स्मृति को बचाने के लिए किया जाता है।

डिफ़ॉल्ट रूप से, यह अंतराल 1800 सेकेंड == 30 मिनट है। यदि आप मान को -1 पर सेट करते हैं, तो सत्र "शाश्वत" होगा और केवल तभी हटाया जाएगा जब उपयोगकर्ता ब्राउज़र टैब बंद कर देता है (ठीक है, या क्लाइंट डिस्कनेक्ट करता है)।

उदाहरण:

// get all keys
Enumeration keys = session.getAttributeNames();
while( keys.hasMoreElements() ){
    System.out.println( (String) keys.nextElement() );
}
// set the inactivity interval
session.setMaxInactiveInterval(60*60*24);   // 1 day
session.setMaxInactiveInterval(-1); // until the browser is closed
// remove all data from the session
session.invalidate();