2012-11-22 4 views
19

मैंने स्थानीय स्टोरेज के आधार पर लॉगिन पृष्ठ बनाया है। पृष्ठ लोड करने पर मैंने स्थानीय स्टोरेज के मूल्य की जांच की है। यदि मैंने एक से अधिक टैब में वेब पेज खोला है और फिर मैं किसी भी टैब से लॉगआउट करता हूं, तो शेष शेष पृष्ठों को स्वचालित रूप से लॉगआउट करना चाहिए।जब उपयोगकर्ता उनमें से किसी एक में लॉग आउट करता है तो सभी खुले टैब स्वचालित रूप से लॉग आउट करें

यदि पुनः लोड/रीफ्रेश का अर्थ है कि यह लॉग आउट हो रहा है।

कृपया मुझे एक स्क्रिप्ट चलाने में मदद करें, जब उपयोगकर्ता पृष्ठ को देखे या इस समस्या को हल करने के किसी अन्य तरीके से कहें।

+0

मैंने आपके प्रश्न शीर्षक को संपादित करने के लिए इसे वास्तव में –

उत्तर

1

बस एक छोटी जावास्क्रिप्ट लिखें जो प्रत्येक 100ms (उदाहरण के लिए) की जांच करता है यदि स्थानीय स्टोरेज में संग्रहीत "सत्र" अभी भी मौजूद है। यदि नहीं, पृष्ठ को रीफ्रेश करें। इसके लिए आप setInterval का उपयोग कर सकते हैं।

+0

पर पूछने के लिए संपादित किया है और यहां मैं प्रत्येक 5 सेकंड को चंप की तरह दोहराया गया AJAX कॉल कर रहा था। यह एक शानदार विचार है। –

+0

या आप घटनाओं का उपयोग कर सकते हैं और स्वयं को कुछ CPU समय बचा सकते हैं! –

+1

क्या वह सत्र स्टोरेज के बजाय स्थानीय स्टोरेज को मतदान नहीं करना चाहिए? sessionStorage टैब के बीच साझा नहीं किया जाता है। – AlexStack

5

"localStorage किसी भी उपयोगकर्ता के कंप्यूटर पर और संपूर्ण ब्राउज़र टैब में अनिश्चित काल के लिए डेटा सहेजा बनी रहती है" मदद कर सकते हैं Source

इसका मतलब यह है कि यदि आप खाली/आप एक में निर्धारित किया है लॉगिन डेटा हटाने टैब, डेटा को अन्य सभी टैबों में भी बदला जाएगा।

तो, यदि उपयोगकर्ता लॉग आउट करता है, तो स्थानीय स्टोरेज डेटा बदलता है।
फिर, अपने टैब पर, फिर onfocus घटना का उपयोग कर पता लगाने जब कोई उपयोगकर्ता परिवर्तन है कि टैब पर ध्यान केंद्रित:

function onFocus(){ 
//Reload Page if logged out (Check localStorage) 
    window.location.reload(); 
}; 

if (/*@[email protected]*/false) { // check for Internet Explorer 
    document.addEventHandler("focusin", onFocus); 
} else { 
    window.addEventHandler("focus", onFocus); 
} 

Source

इसका मतलब है आप लगातार जावास्क्रिप्ट चल नहीं किया जाएगा, या पुन: लोड (एक संभवतः बड़ी मात्रा में) टैब एक ही समय में।

+1

डाउनवॉट्स ओ.ओ. के साथ क्या है यह अच्छा होगा अगर लोग वास्तव में कारण बताएंगे ... – Cerbrus

+2

यह 'हार्ड-वायर' घटनाओं के लिए सलाह नहीं है - आप इस तरह से ईवेंट हैंडलर को आसानी से ओवरराइड कर सकते हैं। इसके बजाए 'window.addEventHandler' का प्रयोग करें। –

+0

समझ गया, संशोधित। – Cerbrus

38

स्थानीय स्टोरेज मान बदलते समय अधिसूचित होने के लिए आप Storage events का उपयोग कर सकते हैं।

function storageChange (event) { 
    if(event.key === 'logged_in') { 
     alert('Logged in: ' + event.newValue) 
    } 
} 
window.addEventListener('storage', storageChange, false) 

हैं, उदाहरण के लिए, एक टैब लॉग आउट:

window.localStorage.setItem('logged_in', false) 

तब सभी अन्य टैब एक StorageEvent प्राप्त करेंगे, और एक चेतावनी दिखाई देगा:

Logged in: false 

हम उम्मीद करते है कि यह आपके सवाल का जवाब दे देगा!

+0

बहुत बहुत धन्यवाद !!! स्रोत ने बहुत मदद की !! – Diego

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