दिलचस्प पोस्ट
अतिरिक्त कॉलम में कोमा विभाजित कॉलम डेटा विभाजित करें ओवरफ्लो-एक्स: छिपकर मोबाइल ब्राउज़र में सामग्री को उगाहने से रोकती नहीं है क्यों दस्तावेज़.क्वेरी चयनकर्ता एक असली ऐरे के बजाय एक स्टेटिक नोडलेस्ट वापस लौटाते हैं? बिगइंटेगर स्विफ्ट में बराबर है? पायथन में XSLT का उपयोग करते हुए XML फ़ाइल को कैसे बदलना है? IOS में एकाधिक स्टोरीबोर्ड का उपयोग करना jQuery के दस्तावेज़ तैयार कार्य आर में आसन्नता मैट्रिक्स की गणना कैसे करें PHP 5.4 कॉल-टाइम पास-बाय-रेफरेंस – आसान सुधार उपलब्ध है? फ़ैक्टर से आज तक परिवर्तित करने में सहायता करें कक्षाओं के बीच मैं एक जावा कॉलबैक कैसे करूं? Html.ImageGetter TextView कैसे मजबूत पैरामीटर के साथ एक सरणी की अनुमति के लिए HTTP त्रुटि 500.19 – आंतरिक सर्वर त्रुटि रिवर्स ऑर्डर में जावा में प्रत्येक लूप के लिए कोई क्या कर सकता है?

जावास्क्रिप्ट में, मैं किसी एक ब्राउज़र विंडो की विशिष्ट पहचान कैसे कर सकता हूं जो एक ही cookedbased sessionId के अंतर्गत है I

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

उदाहरण के लिए, उपयोगकर्ता बॉब के दो ब्राउज़र विंडो सूचीबद्ध होते हैं, सूचीऑफ़ सोमिंग पेज पर। प्रत्येक सूची में एक LoadedPageNumber विशेषता है जिसे मुझे जारी रखने की आवश्यकता है I अन्यथा उपयोगकर्ता हमेशा पृष्ठ 1 पर समाप्त होते हैं, जब वे ताज़ा करते हैं। बॉब ने ब्राउज़र विंडो 1 को लोड किया है और इसे पृष्ठ 5 पर इंगित किया है और फिर ब्राउज़र विंडो 2 को लोड किया है और इसे पृष्ठ 14 पर इंगित किया है। अगर मैं सत्र आईडी पर आधारित विशेषता को संग्रहीत करता हूं, तो बॉब पृष्ठ 1 में खिड़की 1 में मिलेगा यदि वह उसे रीफ़्रेश करेगा।

ध्यान दें कि मेरा राज्य चर वास्तव में इस सरल उदाहरण की तुलना में बहुत अधिक जटिल है और मेरी कठिनाइयों को जारी रखने के लिए मेरी अक्षमता (मेरे ऐप में कमजोरियों) का कारण हो सकता है

मुझे किसी प्रकार की ब्राउज़र विंडो आईडी या कुछ चीज चाहिए यह निश्चित रूप से एक क्रॉस-ब्राउज़र समाधान होने की आवश्यकता है (आईई 6 +, वीकैब? +, एफएफ 2 +)

कोई विचार?

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

Solutions Collecting From Web of "जावास्क्रिप्ट में, मैं किसी एक ब्राउज़र विंडो की विशिष्ट पहचान कैसे कर सकता हूं जो एक ही cookedbased sessionId के अंतर्गत है I"

आप अपना खुद का विन्डो नाम सेट कर सकते हैं, सटीक सिंटैक्स मुझे अभी से बचता है, लेकिन आप खिड़की लोड पर एक विशिष्ट आईडी बनाने के लिए वर्तमान समय और सत्र आईडी का उपयोग कर सकते हैं, फिर उस आईडी का उपयोग करें

यह उसी तरह किया जाएगा जैसे आप जावास्क्रिप्ट विंडो में एक नाम सेट करेंगे। Open () फ़ंक्शन, (लेकिन आप इसे नई विंडो के बजाय स्वयं कर सकते हैं)

गुगलिंग शो:

self.window.name = myclass.getUniqueWindowId (इस सत्र);

अद्यतन करें

रीफ़्रेश से ताज़ा करने के लिए इसे सहेजने की आपकी आवश्यकता के बारे में, मैंने कुछ परीक्षण किए और ताज़ा करने के लिए इसे ताज़ा करने से बचा लिया। प्रारंभिक लोड पर फ़ायरफ़ॉक्स 3 का इस्तेमाल करते हुए, खिड़की का नाम रिक्त है, और CTRL + R दबाकर अधिक से अधिक दबाया जाता है, और खिड़की का नाम पॉपुलेटेड था। मैंने फिर से नाम कोड की सेटिंग को टिप्पणी की और पुनः लोड किया और यह अभी भी नाम बनाए रखा है

<script type="text/javascript"> alert( self.window.name ); self.window.name = "blah"; </script> 

अद्यतन करें

मुझे jQuery के 'jquery-session' प्लगइन पर नीचे टिप्पणी पर ध्यान देना होगा, जो वास्तव में काम करता है और जिस पर चर्चा की गई है उससे अधिक तरह से प्रदान करता है।

यद्यपि , यह भी यह स्पष्ट करना चाहिए कि यह HTML5 के वेब संग्रहण पर निर्भर है, पुराने आईई संस्करणों द्वारा समर्थित नहीं है

कॉर्पोरेट अभी भी IE 7 ('और नीचे' ब्राजील में यहाँ पर भारी निर्भर है)।

self.window.name आधार पर, एचटीएमएल 5 के अनुरूप सभी के लिए समाधान, मैं एक क्रॉस-ब्राउज़र समाधान के रूप में निम्न कोड स्निपेट प्रदान करता हूं:

 <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> <script language="javascript" type="text/jscript"> //---------------------------------------------------------------------- //-- guarantees that window.name is a GUID, and that it would //-- be preserved whilst this window's life cicle //---------------------------------------------------------------------- //-- window.name will be set to "GUID-<SOME_RANDOM_GUID>" //---------------------------------------------------------------------- $(window).load( function () { //---------------------- var GUID = function () { //------------------ var S4 = function () { return( Math.floor( Math.random() * 0x10000 /* 65536 */ ).toString(16) ); }; //------------------ return ( S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4() ); }; //---------------------- if (!window.name.match(/^GUID-/)) { window.name = "GUID-" + GUID(); } } ) //-------------------------------------------------------------------- </script> 

मुझे यहां GUID फ़ंक्शन मिला (जिसके लिए मैंने कुछ कोड साफ-अप प्रस्तावित किया था)।

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

यह बहुत समय पहले है, लेकिन रॉय रिको का जवाब आज मेरी मदद करता है, इसलिए मैं अपना अनुभव साझा करना चाहता हूं। पृष्ठ ताज़ा और पृष्ठ बैकबटन का उपयोग करने के लिए उपयोग करने के लिए, मैं इसे इस तरह कर रहा हूं:

  • आपका सर्वर जांचता है कि ब्राउज़र अपने अनुरोध के साथ GUID भेजता है (केवल एजेक्स या फॉर्म के साथ काम करता है)
  • अगर यह वहाँ नहीं है (ब्राउजर रीफ़्रेश, बैकबुटन) यह सिर्फ एक छोटे जावा स्क्रिप्ट के साथ एक पेज भेजता है यह स्क्रिप्ट GUID बनाता है और इसे ऊपर वर्णित विंडो.नाव स्टोरेज में डालता है। इसके बाद स्क्रिप्ट GUID के साथ छिपे हुए फ़ील्ड के रूप में एक फ़ॉर्म बनाता है और उसे सर्वर पर सबमिट करता है एक्शन एट्रिब्यूट उसी URL को पहले (window.location.href) का उपयोग करता है

-> अब सर्वर GUID को पहचानता है और आवश्यकतानुसार आवश्यक सामग्री वितरित कर सकता है।

यहाँ मेरा कोड है (सुरक्षा कारणों से सर्वर पर बनाए गए GUID, वाक्यविन्यास "$ {gUid} freemarker से है और बस सर्वर से ग्रिड सम्मिलित करता है):

 <script> $(window).load( function () { if (!window.name.match(/^GUID-/)) { window.name = "GUID-" + "${gUid}"; } $('<form action='+window.location.href+' method="POST"><input type="hidden" name="X-GUID" id="X-GUID" value='+window.name+'></form>').appendTo('body').submit(); } ); </script> 

उम्मीद है कि किसी को मदद करता है

वैसे, इस तकनीक को "गैर एसईओ पृष्ठों" पर इस्तेमाल किया जाना चाहिए, क्योंकि जावास्क्रिप्ट की ज़रूरत है ताकि सामग्री प्राप्त हो सके। लेकिन सामान्य एसईओ पृष्ठों में टैब सत्र की पहचान करने की कोई आवश्यकता नहीं है।

बेशक आजकल आप एचटीएमएलएशन सत्र भंडारण का उपयोग कर सकते हैं, लेकिन मैं उस पर भरोसा नहीं करना चाहता, क्योंकि मुझे अच्छी तरह से काम करने के लिए पुराने ब्राउज़र की ज़रूरत है।

आप एचटीएमएल 5 सत्र भंडारण का उपयोग कर सकते हैं, बस एक अनन्य आईडी बनाएं और इसे सत्र के भंडारण पर सेट करें! क्या अच्छा है कि प्रत्येक विंडो या टैब का अपना सत्र संग्रहण है उदाहरण के लिए :

अगर हम 3 विंडो पर निम्नलिखित चलाते हैं:

विंडो 1: sessionStorage.setItem ('कुंजी', 'window1');

विंडो 2: sessionStorage.setItem ('कुंजी', 'window2');

विंडो 3: sessionStorage.setItem ('कुंजी', 'window3');

sessionStorage.getItem ('कुंजी'); <<< यह विंडो पर इसी मान वापस करेगा!

विंडो 1: sessionStorage.getItem ('कुंजी'); विंडो 1 लौटाता है

विंडो 2: sessionStorage.getItem ('कुंजी'); विंडो 2 देता है

विंडो 3: sessionStorage.getItem ('कुंजी'); विंडो 3 देता है

मेरा मानना ​​है कि आप एक वेरिएबल (प्रत्येक टैब / विंडो पर अलग से) को बचाने की कोशिश कर रहे हैं।

sessionStorage आकर्षण के रूप में काम करता है

केवल आपको समस्या का सामना करना पड़ सकता है, उस ब्राउजर को एचटीएमएल 5 का समर्थन करना चाहिए