2010-07-08 12 views
5

हमारे आवेदन 30 मिनट के बाद बंद लॉग करता है और प्रवेश पृष्ठ रीडायरेक्ट कर दिया जाता, मैं web.xml में सत्र टाइमआउट को निर्दिष्ट कर रहा हूँ और redirecting.I के लिए एक requestProcessor का उपयोग कर संदेश उपयोगकर्ता को दिखाने के लिए कह रही है चाहते हैं आपका सत्र समाप्त हो गया एक बार सत्र समाप्त हो जाता मैं कैसे that.Auto लॉग ऑफ कर सकते हैं? मैं पृष्ठ पर त्रुटि संदेश संकेत करने के लिए चाहते हैं "सत्र टाइमआउट है, फिर से लॉगिन करें"। तो मैं सत्र का पता कैसे लगा सकता हूं टाइमआउट है? क्या कोई विधि स्वचालित रूप से ट्रिगर होगी?ऑटो लॉग ऑफ एक बार सत्र समाप्त हो

उत्तर

9

एक गतिविधि परीक्षक बनाएं जो किसी भी उपयोगकर्ता गतिविधि (माउसक्लिक, कीप्रेस) के स्थान पर हर मिनट जांचता है और उपयोगकर्ता सक्रिय होने पर सत्र को जीवित रखने के लिए सर्वर की तरफ दिल की धड़कन करता है और उपयोगकर्ता नहीं करता है सक्रिय। जब 30 मिनट (या जो भी डिफ़ॉल्ट सत्र समय समाप्ति सर्वर साइड पर स्थापित किया गया है) के लिए कोई गतिविधि नहीं है, तो एक रीडायरेक्ट प्रदर्शन करते हैं।

लिए यहाँ क्लिक करें और कुंजी दबाने की घटनाओं और आग ajax अनुरोध बाध्य करने के लिए jQuery की थोड़ी मदद के साथ एक किकऑफ़ उदाहरण है।

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $.active = false; 
     $('body').bind('click keypress', function() { $.active = true; }); 
     checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute. 
    }); 

    function checkActivity(timeout, interval, elapsed) { 
     if ($.active) { 
      elapsed = 0; 
      $.active = false; 
      $.get('heartbeat'); 
     } 
     if (elapsed < timeout) { 
      elapsed += interval; 
      setTimeout(function() { 
       checkActivity(timeout, interval, elapsed); 
      }, interval); 
     } else { 
      window.location = 'http://example.com/expired'; // Redirect to "session expired" page. 
     } 
    } 
</script> 

एक Servlet जो /heartbeat पर सुनता है और करता बनाएं मूल रूप से सिर्फ निम्नलिखित:

@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    request.getSession(); 
} 

सत्र जीवित रखने के लिए।

जब आप सत्र में लॉग इन हुए प्रयोक्ता की दुकान, यह "पूर्ण रूप से अपने" हो जाएगा लॉग आउट जब भी सत्र समाप्त हो। इसलिए आपको उपयोगकर्ता को मैन्युअल रूप से लॉगआउट करने की आवश्यकता नहीं है।

+0

मैं अलर्ट संदेश प्रदर्शित करना चाहता हूं 30 मिनट के बाद, मैं उपरोक्त स्क्रिप्ट को कैसे बदल सकता हूं, मैंने वेब.एक्सएमएल – sarah

+0

में सत्र समय को परिभाषित किया है यह स्क्रिप्ट पॉप अप दिखाती है भले ही एप्लिकेशन उपयोग में है। – sarah

+0

यह वास्तव में तब हो सकता है जब आपके पास एक ही सत्र में कई विंडो खुलती हैं। यह एक बुनियादी किकऑफ उदाहरण था। आपको कुछ कदम आगे बढ़ने की आवश्यकता होगी। उपयोगकर्ता सक्रिय होने तक सत्र को जीवित रखने के लिए सर्वर पक्ष में आग अजाजक चुनाव। आप [मेरे इस अन्य उत्तर] में एक उदाहरण पा सकते हैं (http://stackoverflow.com/questions/2319020/mvc-with-jquery-handling- सत्र-expire/2319211#2319211)। – BalusC

0

आप सर्वलेट सत्र का उपयोग कर रहे हैं, तो आप अगर सत्र jsp/सर्वलेट लौटने isNew() पद्धति का उपयोग करके नया है देखने के लिए जाँच कर सकते हैं। यदि हां, तो उपयोगकर्ता का सत्र समाप्त हो गया है और आप प्रासंगिक संदेश प्रदर्शित कर सकते हैं।

+0

उपयोगकर्ता सत्र समाप्ति संदेश केवल समय के बाद ही दिखाया जाना चाहिए, आपके मामले में यह लॉगआउट के बाद भी प्रदर्शित होगा, जिसकी मुझे – sarah

2

एक श्रोता वर्ग HttpSessionListener को लागू करने बनाएँ और web.xml

में परिभाषित जब किसी भी सत्र नष्ट हो जाता है यह आपको सूचित करेंगे। sessionDestroyed() विधि का प्रयोग करें।

http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/

+1

की आवश्यकता नहीं है उपरोक्त समाधान ब्राउज़र को एक संवाद दिखाने के लिए मजबूर नहीं करेगा। –

+0

उपरोक्त समाधान एप्लिकेशन को लॉगआउट के बाद भी संदेश को संकेत देने के लिए मजबूर करेगा, यह 30 मिनट का समाप्ति समय नहीं देखेगा और संदेश दिखाएगा – sarah

0

अपने JSP के अंदर एक जावास्क्रिप्ट उपयोगिता समारोह को शामिल करें और सर्वर हर 31 मिनट पिंग:

एक पूर्ण उदाहरण देखें। ऊपर उल्लेख किया उपयोगिता समारोह आंतरिक रूप से setTimeout() जे एस फ़ंक्शन का उपयोग किया जाना चाहिए।

setTimeout ("checkServerSession()", /* intervalInMilliSeconds */ 31000); 

ध्यान दें कि

checkServerSession()

एक नियमित रूप से जे एस समारोह जो HTTP अनुरोध लागू किए जा सकते है। अगर अनुरोध सफल सत्र मौजूद है तो अन्यथा उपयोगकर्ता को संकेत दिखाएं।

+0

मुझे एक उदाहरण बताएं, यह कैसे काम किया जा सकता है – sarah

संबंधित मुद्दे