2011-06-05 9 views
7

मैं जावा वेब अनुप्रयोग जहाँ मैं सत्र ब्राउज़र टैब के बीच साझा किया जा रहा रोकने की आवश्यकता है के बीच में साझा है, जिसका अर्थसत्र टैब

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

+1

संभावित डुप्लिकेट [ब्राउज़र-टैब में सत्र कैसे भिन्न करें?] (Http://stackoverflow.com/questions/368653/how-to-differ-sessions-in-browser-tabs) –

+0

क्या आप जावास्क्रिप्ट का उपयोग कर रहे हैं आपका आवेदन – developer

उत्तर

8

आमतौर पर कुकीज़ का संचालन सत्र प्रबंधन के लिए किया जाता है। फिर सभी टैब और ब्राउज़र विंडोज एक ही सत्र साझा करते हैं। लेकिन आप कुकीज के बजाय यूआरएल रीराइट का उपयोग करने के लिए अपने सर्वलेट कंटेनर को कॉन्फ़िगर कर सकते हैं। (यहां एक example for Jetty है।)

यूआरएल फिर से लिखने के साथ सत्र सत्र आईडी युक्त यूआरएल पैरामीटर के माध्यम से पहचाना जाता है। तो विधि HttpServletResponse.encodeURL() विधि का उपयोग करके इस वेब पैरामीटर के प्रत्येक आंतरिक यूआरएल को इस पैरामीटर के साथ बढ़ाया जाना चाहिए। यदि आप विकेट जैसे वेब ढांचे का उपयोग कर रहे हैं, तो संभावना है कि यह आपके लिए पहले ही हो चुका है।

यूआरएल पुनः लिखने के साथ ही एक ही ब्राउज़र उदाहरण के विभिन्न विंडोज़ या टैब में कई अनिवार्य सत्र होना संभव है।

अद्यतन: downvote मैं यूआरएल को फिर से लिखने के स्पष्ट अलग व्यवहार बनाना चाहते के जवाब में:

मान लेते वेबसाइट के URL http://webapp.com में है।

कुकीज़: पहले ब्राउज़र टैब में http://webapp.com खोलें।

सर्वर एक सत्र बनाता है और प्रतिक्रिया में एक कुकी भेजता है।

ब्राउज़र कुकी को संग्रहीत करता है।

फिर दूसरे ब्राउज़र टैब में http://webapp.com खोलें। ब्राउजर हाल ही में संग्रहीत कुकी के साथ इस यूआरएल को जोड़ता है और कुकी को अनुरोध में जोड़ता है।

सर्वर के लिए पहले या दूसरे ब्राउज़र टैब से अनुरोधों के बीच कोई अंतर नहीं है और उसी सत्र से प्रतिक्रिया देता है। कभी-कभी यह वांछित व्यवहार है।

URL पुनर्लेखन: ओपन पहली ब्राउज़र टैब में http://webapp.com

सर्वर आईडी 1 के साथ एक सत्र बनाता है और प्रतिक्रिया पृष्ठ में प्रत्येक यूआरएल में पैरामीटर jsessionid = 1 जोड़ता है। कोई कुकी स्थानांतरित नहीं होती है।

पहले ब्राउज़र टैब से उसी वेबैप के किसी अन्य पृष्ठ पर सभी अनुरोधों में सत्र आईडी (exeample 1 के लिए) शामिल हैं।

फिर दूसरे ब्राउज़र टैब से http://webapp.com खोलें। यहां अंतर है! क्योंकि अनुरोध में कोई कुकी नहीं है और कोई jsessionid पैरामीटर नहीं है, सर्वर एक नया सत्र बनाता है (यानी आईडी 2) और प्रतिक्रिया पृष्ठ में निहित प्रत्येक यूआरएल में पैरामीटर jsessionid = 2 जोड़ता है। अब से दूसरे ब्राउज़र टैब के बाद के सभी अनुरोधों पर सत्र 2 से जुड़े हैं।

तो आपके पास एक ही ब्राउज़र में दो स्वतंत्र सत्र हैं।

+0

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

+0

कुकीज़ और यूआरएल पुनर्लेखन के बीच एक अंतर है। मेरा अद्यतन उत्तर देखें। – vanje

+1

जब भी उपयोगकर्ता पहले टैब का लिंक खोलता है या किसी नए टैब में पहले टैब का यूआरएल कॉपी करता है तो आपको अभी भी कोई समस्या है। – BalusC

0

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