2013-02-27 208 views
18

IE10 अन्य प्रमुख ब्राउज़रों (IE8, IE9, फ़ायरफ़ॉक्स, क्रोम, सफारी) की तुलना में कुकीज़ और सबडोमेन को अलग-अलग संभालती प्रतीत होती है।डिफ़ॉल्ट रूप से सबडोमेन में IE10 साझा कुकीज़

हम परीक्षण वातावरण के लिए बड़े पैमाने पर उप डोमेन का उपयोग करें, जैसे:

  • user1.devel.example.com
  • user2.devel.example.com
  • qa.example.com

और हमारे उत्पादन पर्यावरण शीर्ष पर रहते हैं, उदाहरण के लिए example.com (और तकनीकी रूप से www.example.com पर भी)।

हम कुकी सेट करने के लिए php setcookie($name, $value, $expires) फ़ंक्शन बेवकूफ (कोई स्पष्ट पथ या डोमेन निर्दिष्ट नहीं है) का उपयोग करते हैं, और उसके बाद मूल्य को खाली स्ट्रिंग निर्दिष्ट करके कुकीज़ (जब उपयोगकर्ता लॉग आउट करते हैं) साफ़ करते हैं। यह हमेशा ठीक काम करता है, और प्रत्येक अद्वितीय सबडोमेन ने अपनी कुकीज़ का उपयोग किया है।

आईई 10 अब सभी सबडोमेन के साथ टीएलडी में सेट की गई कुकी को "शेयर" करता है। प्रारंभिक लक्षण हमने देखा था कि कोई भी सबडोमेन से लॉग आउट नहीं कर सकता था। हमने कुछ चीजें देखी हैं:

  • भले ही यह मूल्य साझा करता है, कोई सबडोमेन कुकी को साफ़ करने में सक्षम नहीं है।
  • जब टीएलडी कुकी साफ़ करता है, तो इसे तुरंत सभी सबडोमेन से हटा दिया जाता है।

क्या किसी और ने इसी तरह के व्यवहार को देखा है कि आईई 10 स्टोर्स/सबडोमेन के सापेक्ष कुकीज़ कैसे लागू करता है? शुरुआती सेट-कुकी हेडर भेजते समय कुकी किस डोमेन पर लागू होती है, इसके बारे में स्पष्ट होने के अलावा कोई कामकाज है?

+0

मुझे आईई 10 और कुकीज़ के साथ परेशानी का सामना करना पड़ा है। मुझे नहीं पता कि आपकी समस्या एक जैसी है या नहीं। मेरी समस्या पर अधिक जानकारी के लिए यहां देखें: http://stackoverflow.com/questions/15856886/ajax-on-ie10-dont-send-cookies – jmcollin92

+0

यह व्यवहार IE8 और IE9 में भी मौजूद है। –

उत्तर

15

मैंने अभी इस मुद्दे में भाग लिया है। Cookies with and without the Domain Specified (browser inconsistency)

यह भी संबंधित हो सकती है: Cookie set for subdomain, but IE Developer Tools show cookie at root domain. What am I missing?

मेरा निष्कर्ष यह है कि एक गैर- www रूट डोमेन से एक कुकी सेट करते समय (

यहाँ इस बग/मुद्दे की खोज किसी के लिए एक लिंक है http://sites.com), आईई में यह सभी सबडोमेन के लिए वाइल्डकार्ड कुकी के रूप में देखा जाता है। क्रोम और फ़ायरफ़ॉक्स इस व्यवहार को नहीं दिखाते हैं - वे एक कुकी सेट को एक गैर-www रूट डोमेन से जोड़ते हैं जो केवल उस रूट से जुड़ा होता है।

मैंने .NET वेबफॉर्म, आईआईएस और मेरी मेजबान फ़ाइल का उपयोग कर उदाहरण साइटों को कोड किया। मेरे पास 3 साइटें थीं: a.site.com, b.site.com और site.com। वे सभी एक ही नाम के साथ कुकीज़ की सेवा की। आइए इसे "शॉपिंगकार्ट" कहते हैं।

आप कुकीज़ पर एकाधिक गुण सेट कर सकते हैं, जिसमें कुकी को डोमेन से जोड़ा जाना चाहिए। मैंने इस संपत्ति को .NET द्वारा परिभाषित/छोड़ा जाने के लिए छोड़ा है। जब क्रोम को प्रत्येक साइट से कुकी प्राप्त हुई, तो उसने कुकी के डोमेन को ब्राउजर एड्रेस बार में सूचीबद्ध डोमेन से स्पष्ट रूप से प्रदर्शित किया। आईई में यह मामला नहीं था। आईई कुकी को http://sites.com से ".sites.com" के रूप में परिभाषित किया गया है और कुकीज़ के लिए आरएफसी के अनुसार इसका मतलब है कि यह सभी सबडोमेन से सुलभ है।

आईई में भी, यदि एक ही नाम के साथ एकाधिक कुकीज़ सेट की गई हैं, तो IE उन्हें सेट किए गए क्रम में सर्वर पर लौटाता है। इसलिए यदि मैं पहले http://sites.com पर जाता हूं और फिर http://a.sites.com पर जाता हूं और फिर रीफ्रेश करता हूं, तो http://sites.com से कुकी को http://a.sites.com के अनुरोध में सर्वर को भेजने के लिए वैध कुकी के रूप में कुकी को http://a.sites.com के लिए भेजा जाता है, कुकी http://sites.com के लिए कुकी को छोड़कर सूची में पहला।

.net में, मैंने जो देखा है, कुकीज़ को आम तौर पर मुख्य नाम से एक्सेस किया जाता है, न कि इंडेक्स द्वारा। तो जब सर्वर साइड कोड "शॉपिंगकार्ट" नाम की कुंजी के मान को एक्सेस करने का प्रयास करता है, तो यह कुकी साइट सेट करने वाली पहली साइट के मान को पकड़ लेगा - यहां http://sites.com होगा।

संक्षेप में - गैर-www डोमेन का उपयोग न करें जब आपके पास सबडोमेन होते हैं जो सभी एक ही कुकी कुंजी नाम साझा करते हैं क्योंकि क्रोम/फ़ायरफ़ॉक्स डोमेन एसोसिएशन को संभालने के दौरान संभालता है, आईई खराब काम का कारण बनता है।

Edit--

बस किसी को भी इस पढ़ने के लिए स्पष्ट करने के लिए, मैं IE10 उपयोग कर रहा था इस मुद्दे का पता लगाने के।

0

मुझे PHP सत्र कुकी के लिए IE 11.0.9600 में एक ही समस्या है: इंटरनेट एक्सप्लोरर अपने सभी सबडोमेन में रूट डोमेन कुकीज़ भेज रहा है। इस समस्या के समाधान के लिए, मैं डोमेन नाम एक सत्र चर में स्टोर: तो फिर हर अनुरोध के लिए

$_SESSION['URL'] = str_replace('www.', '', $_SERVER['HTTP_HOST']); 

, मैं सत्र चर की जाँच करें:

if (str_replace('www.', '', $_SERVER['HTTP_HOST']) != $_SESSION['URL']) { 
    session_regenerate_id(true); 
    $_SESSION = array(); 
    $_SESSION['URL'] = str_replace('www.', '', $_SERVER['HTTP_HOST']); 
} 

तब, जब हम करने के लिए रूट डोमेन से स्थानांतरित सबडोमेन, हम उसी सत्र में 'नहीं' होंगे। इसे ठीक करने के लिए यदि आप एक डोमेन पर कई PHP साइटों है http://debugtheweb.com/test/cookieinherit.aspx और http://www.debugtheweb.com/test/cookieinherit.aspx

1

हाँ, यह एक ज्ञात समस्याओं ऐसा लगता है, यहाँ पढ़ें: http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx

वे इस परीक्षण का उल्लेख ।

उदाहरण के लिए - यदि आपके पास रूट (example.com) पर वर्डप्रेस है और आपके पास सबडोमेन (a.example.com) पर एक कस्टम PHP ऐप है तो या तो अपने ऐप या वर्डप्रेस में आपको एक अलग सत्र नाम सेट करने की आवश्यकता है ।

सत्र_नाम() से पहले सत्र_नाम() जोड़ें जो सत्र में दो अलग-अलग नाम देना चाहिए और इसलिए संघर्ष नहीं करना चाहिए।

session_name('AppSession'); 
session_start(); 

आसान।

3

सुपर आसान तरीका:

+0

हाँ धन्यवाद यह मेरे लिए पूरी तरह से काम किया। मेरे पास example.com और webapp.example.com है और example.com की कुकीज़ आईई में टकरा रही थी इसलिए मैं webapp.example.com में लॉग इन नहीं कर सका। यह मेरे लिए तय है, मैं सिर्फ डोमेन नाम सत्र नाम में फेंक देता हूं। '$ sesName = (जारीकर्ता ($ _ सर्वर ['HTTP_HOST'])? $ _SERVER ['HTTP_HOST']: $ _SERVER ['SERVER_NAME']); $ sesName = str_replace ('।',' ', $ sesName); $ sesName = str_replace ('-', '', $ sesName); $ sesName = str_replace (':', '', $ sesName); session_name ($ sesName); ' –