2010-02-05 18 views
13

को रीफ्रेश करने से रोकने के लिए मेटा टैग को रीसेट करने के लिए जावास्क्रिप्ट का उपयोग करना हमारे पास एक विरासत एप्लिकेशन (क्लासिक एएसपी और एएसपीनेट का मिश्रण) है जिसमें कुछ अजाक्स सामग्री समृद्ध पृष्ठ हैं। उम्मीद है कि साइट के उपयोगकर्ता पृष्ठ पर कार्यों का एक सेट निष्पादित करता है जो 15-30 मिनट का उचित समय बता सकता है।पृष्ठ

आवश्यकताओं में से एक यह है कि 15 मिनट की निष्क्रियता के बाद साइट पर लॉग इन करने वाले उपयोगकर्ता स्वचालित रूप से लॉग आउट हो जाते हैं। यह वर्तमान में पृष्ठ में 15 मिनट की निष्क्रियता के बाद उपयोगकर्ता को लॉगआउट पृष्ठ पर रीडायरेक्ट करने के लिए मेटा टैग का उपयोग करके हासिल किया जा रहा है।

<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">

समस्या हम मना रहे हैं ब्राउज़र नहीं करता है लगता है कि सर्वर के साथ कई AJAX बातचीत होने के बावजूद पृष्ठ पर किसी भी गतिविधि कर दिया गया है है। तो ब्राउज़र के निष्क्रियता के बारे में 15 मिनट के बाद, उपयोगकर्ता स्वचालित रूप से लॉग आउट हो जाता है भले ही वे कुछ करने के बीच में हों।

इस message board post से प्रेरित होकर हम इस तरह सादगी यहाँ पेज आदि को बचाने के क्लिक करने के रूप में एक ईवेंट हैंडलर होगा तो

नीचे

की तरह (JQuery) जावास्क्रिप्ट का उपयोग करके झुंझलाहट को ठीक करने की कोशिश की है पेज लोड 5 सेकंड

$(document).ready(function() { 
    var selector = 'meta[name=Refresh]'; 
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp" 
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
}); 

इरादे से किया जा रहा (पुनः) मेटा टैग सामग्री पृष्ठ ताज़ा टाइमर रीसेट किया जाएगा की स्थापना करने के लिए ताज़ा समय को संशोधित करने। दुर्भाग्यवश यह काम नहीं करता है (आईई में)।

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

+1

मेटा रीफ्रेश के पास गतिविधि के साथ कुछ लेना देना नहीं है - यदि आप इसे 15 मिनट तक सेट करते हैं तो यह गतिविधि के बावजूद 15 मिनट पर रीफ्रेश होगा। – Matt

+0

संभावित डुप्लिकेट देखें: http: // stackoverflow।कॉम/प्रश्न/262305/कैसे-कैन-आई-अपडेट-मेटा-रीफ्रेश-से-जावास्क्रिप्ट-जब-उपयोग-एसिंक्रोनस-कॉल – Matt

+0

@ मैट, गतिविधि द्वारा मेरा मतलब था कि पृष्ठ को पुनः लोड नहीं किया गया है। मैंने माना कि जब हम एक क्लासिक एएसपी ऐप के बारे में बात कर रहे हैं तो इसका निहित होता है जहां प्रत्येक पोस्ट पर पृष्ठों को फिर से लोड किया जाता है। –

उत्तर

7

प्रयोग कर रहे हैं इस तरह jQuery कुछ काम कर सकते हैं यह सोचते हैं। मैंने इसका परीक्षण नहीं किया है और यह नहीं पता कि ब्राउज़र दस्तावेज़ दस्तावेज़ में एक नोस्क्रिप्ट तत्व के भीतर मेटा टैग पढ़ेंगे या नहीं।

इस के साथ अपने मेटा टैग बदलें:

<script type="text/javascript"> 
    window.onload = function(){ 
     var timer = null, 
      time=1000*60*15, // 15 minutes 
      checker = function(){ 
       if(timer){clearTimeout(timer);} // cancels the countdown. 
       timer=setTimeout(function() { 
        document.location="/someurl/logout.asp"; 
       },time); // reinitiates the countdown. 
      }; 
     checker(); // initiates the countdown. 
     // requires jQuery... (you could roll your own jQueryless version pretty easily though) 
     if(window.jQuery){ 
      // bind the checker function to user events. 
      jQuery(document).bind("mousemove keypress click", checker); 
     } 
    }; 
</script> 
<noscript> 
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp"> 
</noscript> 

निश्चित रूप से ऐसा करने का बेहतर तरीके हैं। 2 पृष्ठों की सेवा करने की तरह ... एक जावास्क्रिप्ट वाले उपयोगकर्ताओं के लिए और बिना किसी के।

या जावास्क्रिप्ट के बिना लोगों के लिए ऐप को अक्षम करें। : ओ)

संपादित इस पेज के अनुसार: http://www.google.com/support/forum/p/Webmasters/thread?tid=25c023fea4ea60a4&hl=en मेटा रिफ़्रेश noscript तत्व के अंदर काम करना चाहिए।

+0

ग्रेट कोड, लेकिन आप फंक्शन() पर एक "{" गायब हैं –

0

मुझे नहीं लगता कि मेटा रीफ्रेश को रोकने का कोई तरीका है। आप मेटा टैग बदल सकते हैं, लेकिन ब्राउजर ने पहले ही तय कर लिया है कि यह 15 मिनट में रीफ्रेश करने जा रहा है; इसे रोकने के लिए कोई एपीआई नहीं है।

आप ताज़ा नहीं रोक सकते तो या रीडायरेक्ट करने के लिए जावास्क्रिप्ट का उपयोग करें, हो सकता है आप क्षति हो सकती है:

$(window).unload(function() { 
    // Insert code here 
    // to save the user's work. 
    alert('Sorry, you have to log out now.') 
});