2009-04-30 16 views
22

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

यदि आप ब्राउज़र बंद करते हैं, तो एक सत्र कुकी हटा दी जाती है, तो एक ही परिणाम के लिए टैब बंद क्यों न करें?

इसलिए, मैं PHP5 और jQuery का उपयोग कर रहा हूं। क्या ऐसा कुछ भी है जो मैं कर सकता हूं कि जब कोई टैब बंद हो जाए तो मैं इस सत्र के मुद्दे को ठीक कर सकता हूं? दुर्भाग्य से बॉडी टैग पर ऑनबर्ननलोड ईवेंट यहां उपयोगी नहीं है क्योंकि जब आप किसी पृष्ठ से दूर क्लिक करते हैं तो यह उस ईवेंट को फायर करता है, न केवल टैब को बंद करता है।

उत्तर

14

सत्र कुकी प्रति-प्रति विंडो प्रति प्रक्रिया नहीं है। तो अगर आपने नई विंडो का चयन किया है तो भी आपको वही सत्र आईडी मिल जाएगी। यह व्यवहार समझ में आता है। जब आप अपनी साइट ब्राउज़ करते समय प्रत्येक बार एक नई विंडो खोलने के लिए उपयोगकर्ता को फिर से साइन-इन करना नहीं चाहते हैं।

मुझे इस बारे में किसी भी वास्तविक तरीके से नहीं पता है।

+0

पॉल, नीचे शुरू होने वाले सैंडर को मेरी टिप्पणी देखें, "यहां समस्या ..." –

+1

ऐसी परिस्थितियों में, टैब बंद करना मुख्य मुद्दा नहीं है। यह सत्र की समाप्ति को अधिक सक्रिय रूप से नियंत्रित कर रहा है। आप जेएस में क्लाइंट पर कुछ प्रकार के गतिविधि टाइमआउट को कार्यान्वित करना चाहते हैं जो उपयोगकर्ता गतिविधि के बाद स्वचालित रूप से लॉग आउट हो जाता है। आपको अधिकांश बैंकिंग साइटों पर इस प्रकार का व्यवहार मिल जाएगा। –

+0

पॉल, आप सही हैं। मैं इस मुद्दे पर सो गया और यही वह कार्यवाही है जिसे मैं लेने की योजना बना रहा हूं। अब इसे लागू करने के सबसे इष्टतम तरीके पर एक और स्टैक ओवरफ्लो प्रश्न डालने के लिए। –

8

यह डिज़ाइन द्वारा है और इसे बदलने का प्रयास करना एक बहुत बुरा विचार है। क्या होगा यदि कोई उपयोगकर्ता एक नए टैब में एक लिंक खोलता है और उसे बंद कर देता है? क्या मूल टैब में सत्र नष्ट हो जाना चाहिए? बिलकूल नही! यह दर्शाता है कि आपको इसके बारे में क्यों नहीं सोचना चाहिए।

अंतिम ब्राउज़र विंडो बंद होने पर एक सत्र समाप्त होता है। यदि आप कुछ और चाहते हैं, तो आप:

  1. सत्र नहीं चाहते हैं;
  2. अपना खुद का "मिनी-सत्र" आधारभूत संरचना बनाने की आवश्यकता है;
  3. शायद चोट और बग की दुनिया में हैं।
+3

समस्या यहां एक सार्वजनिक वातावरण है, जैसे लाइब्रेरी, और पहचान की जानकारी के साथ किसी की ऑनलाइन प्रोफ़ाइल। मुझे एक समाधान के साथ आने की जरूरत है। –

+0

फिर भी, ऐसा लगता है कि आपके पास इस प्रश्न के कुछ अच्छे उत्तर हैं, और उनमें से एक को सही उत्तर के रूप में चुनना चाहिए। शायद आप एक नया सवाल भी शुरू करना चाहते हैं? – bignose

3

तुम भी एक जावास्क्रिप्ट जब एक टैब बंद कर दिया है का पता लगाता है कि लिखने और जावास्क्रिप्ट

+3

आप यह कैसे कर सकते हैं? – thesecretmaster

+0

एक श्रोता जोड़ने घटना – Hammer

+0

beforeunload करने की कोशिश मैंने किया था इस $ (विंडो) .scroll की तरह कुछ (function() { \t \t अगर (sessionStorage.getItem ('advertOnce')! == 'सही') { \t \t \t \t sessionStorage.setItem ('advertOnce', 'सच'); \t \t \t \t initPopup(); \t \t \t \t \t} \t}); –

2

सत्र वेब संग्रहण में कुकी हटा सकते हैं कुकीज़ के बजाय इस्तेमाल किया जा सकता है अगर आप टैब बंद पर निर्भर करते हैं की जरूरत है।

1

मुझे एक काम मिल गया।

मैं ASP.NETC# में काम कर रहा हूं। Login पृष्ठ को छोड़कर मेरे पास साइट के सभी पृष्ठों के लिए Master Page है। Master Page सेवर Page Load event मुझे संदर्भ पृष्ठ के Url मिलते हैं और यह जांचें कि इसमें साइट की जड़ है या नहीं, अगर मैं Login पृष्ठ पर रीडायरेक्ट नहीं करता हूं और उसके बाद यह Master Page प्रदर्शित नहीं होता है।

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

इस कोड

if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root")) 
     { 
      Response.Redirect("~/Account/Login.aspx"); 
     } 

जब साइट के भीतर से नेविगेट वहाँ कोई समस्या नहीं है, भले ही आप किसी अन्य टैब खुलता है करने के लिए साइट में एक पृष्ठ पर एक लिंक को खोलने है।

यदि आप अतिरिक्त रूप से सुनिश्चित करना चाहते हैं कि आप खंड में Login पृष्ठ पर पुन: कार्य करने से पहले सत्र और प्रमाणीकरण कुकी को मार सकते हैं।

यह तब काम नहीं करेगा जब उपयोगकर्ता एक ही टैब में दूसरी साइट पर नेविगेट करता है और ब्राउज़र back to बटन दबाता है क्योंकि यह कैश पर काम करता है और स्वचालित रूप से सर्वर से अनुरोध नहीं भेजता है।

तो इस टैब को बंद करने पर सत्र या प्रमाणीकरण कुकी मार नहीं करता, लेकिन यह टैब बंद करने के बाद प्रवेश किए बिना साइट reentering को रोकने में मदद कर सकते हैं।

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