jsp - Check Database value,when there is no interaction of user with session -


मैंने एक test.jsp, web.xml और session listener लिखा है। सत्र का समय समाप्त करने के लिए मैं HttpSessionListener < / कोड> सुविधा। 1 सत्र के बाद मेरा सत्र अवैध हो रहा है, जब सत्र के साथ कोई उपयोगकर्ता इंटरैक्शन नहीं होता है। प्रौद्योगिकी का प्रयोग किया गया: जेएसपी, सर्वलेट जेएसपी

  & lt;% @ पृष्ठ आयात = "java.util.list"% & gt; & Lt;% @ पृष्ठ आयात = "java.util.ArrayList"% & gt; & LT; html & gt; & Lt; शीर्ष & gt; & Lt; title & gt; सर्वलेट सत्र लिस्टर उदाहरण & lt; / title & gt; & Lt; / head & gt; & LT; बॉडी & gt; & Lt; h2 & gt; उपयोगकर्ता स्क्रीन जोड़ें & lt; / h2 & gt; & Lt; span style = "float: right" & gt; & Lt; a href = "DestroySession.jsp" & gt; इस सत्र को नष्ट करें & lt; / a & gt; & Lt; / span & gt; & Lt; form method = "post" कार्रवाई = "AddUser.jsp" & gt; & Lt; h3 & gt; सूची में शामिल करने के लिए उपयोगकर्ता नाम दर्ज करें & lt; / h3 & gt; & Lt; input type = "text" name = "user" / & gt; & Lt; इनपुट प्रकार = "सबमिट करें" मान = "उपयोगकर्ता जोड़ें" / & gt; & Lt; / प्रपत्र & gt; & Lt;% सूची & lt; स्ट्रिंग & gt; उपयोगकर्ता = (सूची & lt; स्ट्रिंग & gt;) session.getAttribute ("उपयोगकर्ता"); के लिए (इंट आई = 0; रिक्त! = उपयोगकर्ता & amp; i & lt; users.size (i ++) {out.println ("& lt; br / & gt;" + प्रयोक्ता। गेट (i)); }% & Gt; & Lt; / body & gt; & Lt; / html & gt;   

जावा कोड

  आयात javax.servlet.http.HttpSessionEvent; आयात javax.servlet.http.HttpSessionListener; पब्लिक क्लास सत्र लिस्टनर एचटीटीपी सत्र लॉजिस्टर लागू करता है {निजी इनल सत्र = 0; सार्वजनिक शून्य सत्र (HttpSessionEvent घटना) (सिंक्रनाइज़) (यह) {sessionCount ++; } System.out.println ("सत्र बनाया गया:" + event.getSession ()। GetId ()); System.out.println ("कुल सत्र:" + सत्र काउंट); } सार्वजनिक शून्य सत्र नष्ट हो गया (एचटीटीपी सत्र अवतार घटना) {सिंक्रनाइज़ (इस) {sessionCount--; } System.out.println ("सत्र नष्ट हो गया:" + event.getSession ()। GetId ()); System.out.println ("कुल सत्र:" + सत्र काउंट); }}   

web.xml

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8"? & Gt; & LT; वेब एप्लिकेशन & gt; & LT; प्रदर्शन-नाम & gt; SessionListener & lt; / प्रदर्शन-नाम & gt; & LT; वितरण योग्य / & gt; & LT; श्रोता & gt; & LT; श्रोता श्रेणी & gt; SessionListener & lt; / श्रोता श्रेणी & gt; & Lt; / श्रोता & gt; & LT; सत्र-config & gt; & LT; सत्र-समय समाप्ति & gt; 1 & lt; / सत्र-समय समाप्ति & gt; & Lt; / सत्र-config & gt; & Lt; / वेब एप्लिकेशन & gt;   

मेरी आवश्यकता है: जब 1 मिनट के लिए उपयोगकर्ता के साथ कोई इंटरैक्शन नहीं होता, तो मैं कुछ डाटाबेस मान के आधार पर सत्र को अमान्य करना चाहता हूं। यदि डेटाबेस मान गलत है तो सत्र को अवैध नहीं किया जाना चाहिए। यदि डेटाबेस मान सही है तो सत्र को अमान्य किया जाना चाहिए। लेकिन 1 मिनट के बाद (जब सत्र के साथ उपयोगकर्ता का कोई इंटरैक्शन नहीं होता है), sessionListener वर्ग के sessionDestroyed फ़ंक्शन को स्वचालित रूप से कहा जाता है और मैं डेटाबेस मूल्य की जांच करने में सक्षम नहीं हूं।

आपको इसे करने की कोशिश करनी चाहिए:

  • कस्टम मैनेजमेंट थ्रेड में सत्र जोड़ें
  • रीक्यूलर अंतराल पर कस्टम मैनेजमेंट थ्रेड को नीचे दिए गए चरणों को करना चाहिए।
    • कस्टम मैनेजमेंट थ्रेड को डीबी वैल्यू पढ़ें
    • यदि डीबी में अमान्य सत्र अक्षम है, तो प्रबंधन धागा को setMaxInactiveInterval का उपयोग करके सत्र टाइमआउट मान बढ़ाएं। मान -1 का मतलब कभी भी निषिद्ध नहीं है।
    • अगर डीबी में अमान्य सत्र सक्षम है, तो प्रबंधन धागा को छोटा करके सेट टाइमटाइम मान कम करें setMaxInactiveInterval में मान।

Comments