2010-10-12 15 views
5

के बाद जेएसपी स्वचालित रीडायरेक्ट (सत्र इंटरैक्शन) के बिना सत्र टाइमआउट का पता लगाने का कोई तरीका है, और इसे किसी पृष्ठ पर रीडायरेक्ट करें; यानी यदि पृष्ठ @ विशिष्ट अवधि पर कोई गतिविधि नहीं है; सर्वर इसे पहचानता है और इसे किसी अन्य पर स्वचालित रूप से रीडायरेक्ट करता है।सत्र एक्सपेयर/टाइमआउट

उपयोगकर्ता उपयोगकर्ता इंटरैक्शन मेरा मतलब है; उपयोगकर्ता समय पर क्लिक करते समय सत्र टाइमआउट का पता लगाने का एक तरीका है, तो कुछ अनुरोध सर्वर पर जाते हैं और फिर सर्वर जांचता है कि वर्तमान उपयोगकर्ता सत्र समाप्त हो गया है या नहीं।

मुझे यहां क्या चाहिए यह है कि हम सर्वर को कुछ भी सूचित नहीं करते हैं (या हम कोई कार्रवाई नहीं करते हैं), लेकिन जब सत्र समाप्त हो जाता है तो सर्वर स्वचालित रूप से इसका पता लगाता है और आवश्यक कार्रवाई करता है।

धन्यवाद, रजा

उत्तर

3

आप निश्चित रूप से जावास्क्रिप्ट में ऐसी बात एक दस्तावेज चौड़ा कुंजीपटल और/या माउस श्रोता और समय समाप्त के साथ एक समय-समय पर विधि को लागू करने से कर सकते हैं।

var timeOut = 1000 * 60 * 30; // 30 minutes 
var lastActivity = new Date().getTime(); 
var checkTimeout; 
checkTimeOut = function(){ 
    if(new Date().getTime() > lastActivity + timeOut){ 
     // redirect to timeout page 
    }else{ 
     window.setTimeout(checkTimeOut, 1000); // check once per second 
    } 
} 

अब अपनी वैश्विक श्रोताओं सिर्फ हर कार्रवाई पर वर्तमान समय के lastActivity सेट करना होगा।

प्रश्न को फिर से पढ़ने पर, आप एप्लिकेशन सर्वर से वास्तविक सत्र टाइमआउट का उपयोग करना चाहते हैं। यह एक कठिन है, क्योंकि जब आप सर्वर पर AJAX अनुरोध भेजते हैं तो आप वास्तव में सत्र समाप्त होने तक सत्र को बनाए रखेंगे (जब तक कि कोई कठोर सीमा न हो), इसलिए मेरा उत्तर अभी भी ऐसा करने का सबसे अच्छा तरीका हो सकता है।

+0

मैंने पहले भी इस तरह की एक विधि का इस्तेमाल किया है हो सकता है और यह अच्छी तरह से काम करता है।+1 – cjstehno

+0

धन्यवाद, मुझे वास्तव में इस चीज़ की ज़रूरत है, बीटीडब्ल्यू मुझे एक ही साइट पर संबंधित लिंक भी मिला है http://stackoverflow.com/questions/1985250/notify-user-about-session-timeout-in-j2ee – user473445

0

मैं एक ही समस्या का कुछ हद तक था इसलिए यहाँ मैं इसे कैसे हल ...

मूल रूप से मैं जावास्क्रिप्ट के साथ ग्राहक के पक्ष पर एक सत्र टाइमर बनाई गई है। मैं सर्वर पर सत्र को जीवंत रखने के लिए समय-समय पर एक AJAX कॉल (एक टाइमर पर जो वास्तविक सर्वर टाइमआउट सेटिंग से कम है) भेजता हूं।

फिर मैंने एक और टाइमर बनाया जो क्लाइंट साइड पर गिना जाता है (वास्तविक सर्वर टाइमआउट सेटिंग के समान समय पर सेट)। यदि वह टाइमर समाप्त हो जाता है, तो सर्वर पर AJAX कॉल किया जाता है जो session.invalidate() चलाता है और उसके बाद लॉगिन पृष्ठ पर जाता है। यह टाइमर हर बार रीसेट होता है जिसमें सत्र को जीवित रखना चाहिए (यानी माउस क्लिक, कीप्रेस, इत्यादि)

7

यदि आवश्यकता केवल लॉगिन पृष्ठ (या कोई अन्य पृष्ठ) पर रीडायरेक्ट करना है सत्र का समय समाप्त, यह मैं कैसे इसे लागू करने की कोशिश की है है:

सभी पृष्ठों के लिए निम्न स्क्रिप्टलेट उस लॉगिन

<% 
int timeout = session.getMaxInactiveInterval(); 
response.setHeader("Refresh", timeout + "; URL = login.jsp"); 
%> 

इस तरह किसी भी पृष्ठ है कि आवश्यकता है लॉगिन ताज़ा/के लिए लॉग इन पर रीडायरेक्ट करेगा की आवश्यकता है शामिल करें। सत्र के बाद jsp (इसे वांछित यूआरएल बदलें)

या (किसी भी पृष्ठ वंचित होने से बचें)

आप वास्तव में के रूप में एक अलग फाइल (timedoutRedirect.jsp) में लिखने और इसे शामिल कर सकते हैं सभी पृष्ठों के लिए एक ऐसा हेडर (में लॉगिन "JSP संपत्ति समूह" का उपयोग की आवश्यकता है web.xml)

<jsp-property-group> 
     <display-name>all jsp</display-name> 
     <url-pattern>/users/*</url-pattern> 
     <include-prelude>/timedoutRedirect.jsp</include-prelude>   
</jsp-property-group> 

(आप) अपनी परियोजना विनिर्देशों के लिए प्रस्तावना यूआरएल को समायोजित करने के

+0

धन्यवाद @ जिमी। यह स्क्रिप्लेट मेरे लिए शर्त लगाता है। – insanity

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