2008-12-12 8 views
16

को संभालने के लिए पर्याप्त स्मार्ट है, मैंने जावास्क्रिप्ट का उपयोग करके एक सत्र टाइमआउट चेतावनी लागू की है जो उपयोगकर्ता से पूछता है कि वे अपने सत्र या लॉगआउट का विस्तार करना चाहते हैं। समस्या यह है कि यह एक इंट्रानेट पोर्टल के लिए है जहां बिजली उपयोगकर्ताओं के पास अक्सर ब्राउज़र में कई ब्राउज़र विंडो या टैब खुले होते हैं। वर्तमान में, उन्हें संकेत दिया जाएगा कि वे हर ब्राउज़र विंडो से लॉग आउट होने वाले हैं। मैं कोड को समझने के लिए स्मार्ट कैसे बना सकता हूं कि वे सक्रिय रूप से किसी अन्य ब्राउज़र सत्र का उपयोग कर रहे हैं?आप एक सत्र टाइमआउट चेतावनी कैसे प्रदर्शित कर सकते हैं जो एकाधिक खुले ब्राउज़र या टैब

+0

यह एक दिलचस्प सवाल है और बहुत व्यावहारिक है। मैं इसके जवाब के लिए देखूंगा क्योंकि मेरे पास तत्काल उत्तर नहीं है :) –

+0

कोई विचार नहीं कि यह नीचे क्यों मतदान किया गया था। – MusiGenesis

+0

हाँ, मैं भी आश्चर्यचकित था। मैंने इसे वोट दिया, चूंकि जोएल एसओ के लिए नया है, इसलिए उसने मतदान करके उसे हतोत्साहित करने के लिए कुछ भी गलत नहीं किया है :) –

उत्तर

2

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

अपनी टिप्पणी के जवाब में:

का प्रयोग न करें निर्मित सत्र तंत्र, एक सर्वर साइड presistent सरणी या एक डेटाबेस प्रवेश का प्रयोग अपनी खुद की वसीयत।

नहीं, HTTP अनुरोध में कुछ भी आपको बताता है कि कितने ब्राउज़र खुले हैं, लेकिन आप अपनी स्वयं की सत्र आईडी को असाइन कर सकते हैं क्योंकि उपयोगकर्ता प्रत्येक ब्राउज़र विंडो खोलता है। सर्वर पर अजाक्स कॉल करें, देखें कि क्या उपयोगकर्ता ने टाइम-आउट किया है, और यदि आप सत्र लॉग में सबसे कम (या अंतिम) प्रविष्टि हैं तो आप ब्राउज़र हैं जो चेतावनी प्राप्त करता है।

+2

2 विचार: 1) वास्तव में बिना किसी .NET ऐप की सत्र स्थिति कैसे जांचें सत्र का विस्तार? 2) क्या वास्तव में यह बताने का एक तरीका है कि उपयोगकर्ता के पास कितनी ब्राउज़र विंडो हैं? Http अनुरोध में कुछ भी आपको यह – Joel

+0

बताता है कि जब उपयोगकर्ता कोई कार्रवाई करता है तो सत्र को अपडेट करने के लिए फ़ंक्शन करें, जब आप सत्र स्थिति की जांच कर रहे हों तो फ़ंक्शन को कॉल न करें। आप एजेंट स्ट्रिंग के आधार पर कितने ब्राउज़र खुले हैं, यह नहीं पता कि आप प्रत्येक के विंडोज/टैब का पता लगा सकते हैं। – Adam

+0

मुझे समझ में नहीं आता कि यह कैसे काम करेगा।साथ ही, यदि वे अलग ब्राउज़र (जैसे आईई और एफएफ) या एक ही ब्राउज़र के अलग-अलग उदाहरणों का उपयोग कर रहे हैं तो उनके पास अलग-अलग सत्र हैं इसलिए यह कोई मुद्दा नहीं है। – Joel

0

क्या यह काम करेगा?

एक जावास्क्रिप्ट कुकी स्टोर करें और यह निर्धारित करने के लिए कि किसी अन्य टैब में सत्र बढ़ाया गया है या नहीं?

लग रहा है काम करता है की तरह ...

+1

4 साल बाद यह अभी भी सही उत्तर की तरह दिखता है, कम से कम ASP.NET के लिए। समस्या यह है कि आपको क्लाइंट-साइड और सर्वर-साइड दृष्टिकोण के संयोजन की आवश्यकता है, और मुझे लगता है कि आप इसे सर्वर-साइड नहीं प्राप्त कर सकते हैं (क्योंकि आप लॉगिन/आउट या सत्र प्रारंभ/अंत ट्रैक कर सकते हैं, लेकिन क्लाइंट- साइड गतिविधि जिसकी सर्वर अनजान है)। मुझे लगता है कि इसलिए आपको वही चाहिए जो आप यहां सुझा रहे हैं। जब मैं इसे काम करता हूं तो मैं इसे पोस्ट करूंगा। – philw

2

आप सभी टैब/विंडो पर भरोसा नहीं कर सकते हैं एक ही सत्र में हिस्सा लेने की है, क्योंकि वे पैदा की जा सकती है और अलग-अलग प्रक्रियाओं के भीतर निहित है और आप की जरूरत नहीं है उस पर अधिक नियंत्रण।

लेकिन यदि आपका कोड जावास्क्रिप्ट कुकी का संदर्भ देता है, तो आप अपने छद्म-सत्र स्थिति को एक पोस्टबैक (सिंक्रोनस या एसिंक्रोनस AJAX) के माध्यम से देख सकते हैं। लेकिन फिर आप उपयोगकर्ता के ब्राउज़र पर कुकीज़ सक्षम होने पर निर्भर करते हैं।