2012-11-07 30 views
5

मैं 7 एप्लिकेशन server.First मैंसमय समाप्त web.xml में सेट जावा

<session-config> 
     <session-timeout>1</session-timeout> 
    </session-config> 
रूप web.xml में एक मिनट के रूप में मेरे समय समाप्ति के साथ परीक्षण कर रहा हूँ बिलाव पर अपने आवेदन टाइमआउट सेट करने के लिए कोशिश कर रहा हूँ में काम नहीं कर रहा

और मैं यह सुनिश्चित करने के लिए HttpSessionListener का उपयोग कर रहा हूं कि मेरा टाइमआउट ठीक काम कर रहा है। मैंने वेब.एक्सएमएल में अपना सत्र लिस्टनर क्लास घोषित किया।

public class HttpSessionChecker implements HttpSessionListener { 

    public void sessionCreated(HttpSessionEvent event) { 
     System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date()); 
    } 
    public void sessionDestroyed(HttpSessionEvent event) { 
     System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date()); 
    } 
} 

और web.xml में

<listener> 
    <listener-class>com.test.util.HttpSessionChecker</listener-class> 
</listener> 

लेकिन जब अपने सर्वर शुरू और मेरे आवेदन शुरू मैं देख रहा हूँ सत्र लॉग इन पेज पर ही शुरू किया जाता है।

Session ID 934073ED5E9933158995EE5EB680D3F7 created at Wed Nov 07 09:39:13 PST 2012 

और जब मैं एक मिनट या कुछ समय की तुलना में अधिक से अधिक पांच मिनट बिलाव कारण तुरंत अपने आवेदन में समय समाप्त आग और अपने आवेदन सत्र में कुछ पर क्लिक न करें प्रयोग में नहीं रहना नहीं है Expired.Still मैं कर रहा हूँ किसी अन्य पृष्ठ पर नेविगेट करने में सक्षम। लेकिन जब मैं लॉगिन पेज पर लॉग इन रहता हूं या लॉग-आउट करता हूं तो मुझे लगता है कि सत्र नष्ट हो गया है। लेकिन जब एक बार लॉग इन किया जाता है और जब मैं एप्लिकेशन सत्र टाइमआउट के अंदर होता हूं तो नहीं हो रहा है। मुझे

Session ID 934073ED5E9933158995EE5EB680D3F7 destroyed at Wed Nov 07 09:42:13 PST 2012 

मैं क्या गलत कर रहा हूं? और web.xml में <session-timeout> का उल्लेख करने के बाद भी मुझे कोड में कहीं session.invalidate कोड चाहिए? जेएसएफ में नष्ट सत्र में मैं login.xhtml पर रीडायरेक्ट कैसे कर सकता हूं?

+0

तर्क कहां है जो आपका सत्र बनाता है? आप पहले '@ सत्र स्कोप्ड' बीन का उपयोग कहां से करते हैं? क्या आप पहले अनुरोध करने से पहले सक्रिय सत्रों की जांच करते हैं या आप चुपचाप एक नया बनाते हैं? – kolossus

+0

जांचें [जेएसएफ AJAX अनुरोध पर सत्र टाइमआउट हैंडलिंग] (http://stackoverflow.com/q/11203195/1065197) –

+0

@ कोलोसस ... जब मैं अपना एप्लिकेशन लॉन्च करता हूं, तो लॉगिन पेज लॉग इन बीन होगा जो सत्र स्कॉप्ड है। और लॉगिन के समय हम कहीं भी जांच नहीं कर रहे हैं! (Session.isNew())। मुझे लगता है कि यह एक नया सत्र बना रहा है। – SRy

उत्तर

7

आप कुछ भी गलत नहीं कर रहे हैं। जब सत्र समाप्त हो जाता है, तो पृष्ठभूमि थ्रेड प्रत्येक x मिनट की जांच करेगा। यह कंटेनर विशिष्ट है। यह आपके द्वारा निर्दिष्ट समय के बाद समाप्त होने की गारंटी नहीं है। मैं tomcat में जानता हूँ आप server.xml फ़ाइल में इस चेक अंतराल को आसानी से संशोधित कर सकते हैं।

+1

लेकिन जब मैं लॉग इन हूं और एप्लिकेशन के अंदर हूं तो मेरा सत्र क्यों नष्ट नहीं हुआ है? – SRy

+0

इसी कारण से। यदि चेक अंतराल टाइमआउट मान से बड़ा है तो यह अभी तक नष्ट नहीं होने वाला है। –

+2

@MarcusBlackhall जहां server.xml में मुझे अंतराल सेट करना है? – confile