2010-06-02 6 views
39

मुझे सत्र समय समाप्ति अंतराल को बदलने के लिए अपने उपयोगकर्ता को एक वेब इंटरफ़ेस देना होगा। इसलिए, वेब एप्लिकेशन के विभिन्न इंस्टॉलेशन उनके सत्र के लिए अलग-अलग टाइमआउट प्राप्त करने में सक्षम होंगे, लेकिन उनके web.xml अलग नहीं हो सकते हैं।जावा वेब अनुप्रयोगों में गतिशील रूप से सत्र टाइमआउट कैसे सेट करें?

क्या प्रोग्राम टाइमआउट प्रोग्रामेटिक रूप से सेट करने का कोई तरीका है, ताकि मैं कॉन्फ़िगर किए गए अंतराल को पढ़ने और इसे एप्लिकेशन स्टार्टअप पर सेट करने के लिए ServletContextListener.contextInitialized() का उपयोग कर सकूं?

बहुत बहुत धन्यवाद।

उत्तर

63

ServletContextListener का उपयोग करने के बजाय, HttpSessionListener का उपयोग करें। sessionCreated() विधि में, आप प्रोग्राम टाइमआउट प्रोग्रामेटिक रूप से सेट कर सकते हैं।

public class MyHttpSessionListener implements HttpSessionListener{ 
    public void sessionCreated(HttpSessionEvent event){ 
    event.getSession().setMaxInactiveInterval(15*60); //in seconds 
    } 
    public void sessionDestroyed(HttpSessionEvent event){} 
} 

और मत भूलना तैनाती डिस्क्रिप्टर में श्रोता परिभाषित करने के लिए:

<webapp> 
... 
    <listeners> 
    <listener-class>com.example.MyHttpSessionListener</listener-class> 
    </listeners> 
</webapp> 

फिर भी, मैं प्रत्येक अनुप्रयोग के लिए अलग web.xml फ़ाइलों के निर्माण और वहाँ सत्र टाइमआउट को परिभाषित करने की सिफारिश करेंगे:

<webapp> 
... 
    <session-config> 
    <session-timeout>15</session-timeout> <!-- in minutes --> 
    </session-config> 
</webapp> 
+0

वहाँ (आदेश समय समाप्ति है कि सभी नए बनाए गए सत्र को प्रभावित करेगा chosse करने के लिए?) एक तरह से बदलने के लिए स्थिर 15 * 60 एक चर वेब पेज से http श्रोता के लिए पारित कर रहा है? – user2133558

31

वहाँ सत्र टाइमआउट सेट करने के लिए प्रोग्राम के

वहाँ मूलतः सत्र टाइमआउट मान सेट करने के तीन तरीके हैं एक रास्ता है: मानक web.xml फ़ाइल में session-timeout का उपयोग करके

  • ~ या ~
  • इस तत्व की अनुपस्थिति में, सर्वर के डिफ़ॉल्ट session-timeout मान (और इस प्रकार सर्वर स्तर पर इसे कॉन्फ़िगर करना) प्राप्त करके ~ या ~
  • अपने सर्वलेट या जेएसपी में HttpSession. setMaxInactiveInterval(int seconds) विधि का उपयोग करके प्रोग्रामेटिक रूप से।

लेकिन ध्यान दें कि बाद में विकल्प वर्तमान सत्र के लिए टाइमआउट मान सेट, यह एक वैश्विक सेटिंग नहीं है।

0

जैसा कि एक और anwsers ने बताया, आप एक सत्र श्रोता में बदल सकते हैं। लेकिन आप इसे सीधे अपने सर्वलेट में बदल सकते हैं, उदाहरण के लिए।

getRequest().getSession().setMaxInactiveInterval(123); 
+2

हां, यह संभव है, हालांकि यह "कब" होता है इसकी गारंटी नहीं देता .. और यह आपके सर्वलेट के जीवन चक्र पर निर्भर करता है .. यह एक विकल्प है .. ठीक है .. नूर: श्रोता इसे हमेशा ईवेंट बनाने पर सेट करेगा। –

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

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