2011-02-05 18 views
7

उपयोगकर्ता PHP में पंजीकृत होने के बाद मैं एक डोमेन से कुकी बनाना चाहता हूं। और यह कुकी 4 अन्य डोमेन तक पहुंच योग्य नहीं है जो सबडोमेन नहीं है। मुझे पता है कि कुकीज अन्य डोमेन के लिए सुलभ होने के लिए डिज़ाइन नहीं किए गए हैं। उदाहरण के लिए मैंने डोमेन www.firstdomain.com से कुकीज़ परिवर्तक $ user_email सेट किया है और इसे अन्य डोमेन जैसे www.seconddomain.com, www.thirddomain.com आदि तक एक्सेस करना चाहते हैं। यह PHP या जावास्क्रिप्ट का उपयोग करके किया जा सकता है। कोई विचार कृपया।एकाधिक डोमेन के लिए PHP कुकीज़

धन्यवाद!

उत्तर

6

जैसा कि आपने पहले ही कहा है, एक कुकी केवल उस डोमेन से डोमेन के लिए सेट की जा सकती है (इसके सबडोमेन सहित)। और यदि आपके डोमेन एक सामान्य सुपरडोमेन साझा नहीं करते हैं, तो आपको प्रत्येक कुकी को प्रत्येक डोमेन के लिए अलग-अलग सेट करने की आवश्यकता है।

आप इसे एक स्क्रिप्ट के साथ कर सकते हैं जो प्रत्येक डोमेन पर आपके लिए कुकी सेट करता है। लेकिन इन स्क्रिप्ट को अनुरोध प्रमाणित करना सुनिश्चित करें ताकि केवल आप कुकीज़ सेट कर सकें।

+0

मुझे लगता है कि यह आलेख काफी संक्षेप में बताता है: http://www.codeguru.com/csharp/csharp/cs_internet/article.php/c19417/Sharing-Cookies-Across-Domains.htm – peteski

1

मैंने बिल्कुल वही समस्या हल की है (वास्तव में 4 डोमेन के लिए भी)। एकमात्र समाधान जिसके साथ मैं आया हूं, 'सफल लॉगिन पेज' पर 3 छिपे हुए आइफ्रेम शामिल हैं और उन iframes बस www.domain1.com/register_session.php, www.domain2.com/register_session.php, आदि लोड करते हैं। ...

register_session.php के लिए एक पैरामीटर मैं 'SID' का उपयोग जो सत्र आईडी है के रूप में:

session_id($_GET['sid']); 
session_start(); 

यह उन सभी डोमेन लेकिन पर जिंदा सत्र रखने के लिए वास्तव में है ही अपने मामले के लिए होगा कुकीज़ के साथ।

+0

वैकल्पिक रूप से, आप केवल [सीओआरएस] के माध्यम से एक क्रॉस-उत्पत्ति AJAX अनुरोध कर सकते हैं (http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross -ऑरिजिन-संसाधन-साझाकरण /) डोमेन भर में जानकारी पास करने के लिए। –

9

जब वैध कुकीज़ के लिए कुकी सूची, कुकी है जहाँ से यूआरएल लाए जाने के लिए किया जाएगा मेजबान के इंटरनेट डोमेन नाम के साथ बनाया का डोमेन विशेषताओं का एक तुलना खोज। यदि कोई पूंछ मैच है, तो कुकी मिलान के माध्यम से यह देखने के लिए मिलान करेगी कि यह भेजा जाना चाहिए या नहीं। "पूंछ मिलान" का अर्थ है कि डोमेन विशेषता मेजबान होस्ट के के पूर्ण योग्य डोमेन नाम की पूंछ के विरुद्ध मेल खाती है। "acme.com" का एक डोमेन विशेषता होस्ट नाम "anvil.acme.com" के साथ-साथ "शिपिंग.crate.acme.com" से मेल खाती है। निर्दिष्ट डोमेन के भीतर केवल होस्ट करता है कुकी डोमेन और डोमेन के लिए में डोमेन के डोमेन को रोकने के लिए कम से कम दो (2) या तीन (3) अवधि होनी चाहिए: ".com", "। edu ", और" va.us "। कोई भी डोमेन जो में से किसी एक के भीतर विफल रहता है, नीचे सूचीबद्ध सात विशेष शीर्ष स्तर डोमेन केवल दो अवधि की आवश्यकता है। किसी भी अन्य डोमेन को कम से कम तीन की आवश्यकता है। सात विशेष शीर्ष स्तर डोमेन हैं: "COM", "EDU", "नेट", "ORG", "GOV", "MIL", और "INT"।

डोमेन का डिफ़ॉल्ट मान सर्वर का होस्ट नाम है जो कुकी प्रतिक्रिया उत्पन्न करता है।

here पढ़ें।

आप एक मेजबान से एक आईफ्रेम लोड कर सकते हैं जो उसके बाद सेगमेंट भाग (# के बाद) में एन्कोडेड कुकी मान के साथ पुनः लोड हो जाता है।

तब आप मूल विंडो से दस्तावेज़.लोकेशन विशेषता का उपयोग कर सकते हैं (केवल एक चीज को सुलभ करता है)। इसे डीकोड करें और इसे अपने सर्वर पर AJAX अनुरोध करने के लिए पास करें।

यह ऐसा दिखाई दे सकता है।

xss.php (कुकीज़.example पर स्थित है।कॉम):

<?php 
$data = array(
'uid' => $_COOKIE['uid'], 
'loginhash' => $_COOKIE['loginhash']); 
header('Location: xss.php#'.urlencode(json_encode($data))); 

इस विशेष मामले के लिए इसे हैशटैग होने की आवश्यकता नहीं है! यह अन्य स्थितियों के लिए सिर्फ विश्वासयोग्य है। यह जावास्क्रिप्ट में भी किया जा सकता है।

एक अन्य वेबसाइट xss.php एम्बेड करता है:

<iframe id="cookies" src="http://cookies.example.com/xss.php"></iframe> 

you need to somehow delay the following of do it in a loop that stops after 5 seconds or something. 

if(document.getElementById('cookies').location != 'http://cookies.example.com/xss.php') { 
// read location, extract hashtag, json decode using javscript, there you have your user. send it to server for validation or whatever. 
} 

इस teqnique XSS प्राप्त करने कहा जाता है। यह उदाहरण के लिए फेसबुक द्वारा उनके सभी जावास्क्रिप्ट कनेक्ट पुस्तकालयों के लिए उपयोग किया जाता है।

शायद एक बेहतर तरीका टॉकन एक्सचेंजिंग प्रोटोकॉल जैसे ओपनिड होगा।

अमेज़ॅन इसका भी उपयोग करता है।

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

+0

क्या आप अपना उत्तर संपादित कर सकते हैं (शायद नमूना कोड का एक टुकड़ा दें) ताकि मैं आपको फिर से उठा सकूं? मैं गलती से अपने अपवित्र undid। –

+0

सही आ रहा है। –

+0

मुझे लगता है कि यह एक और अधिक सुरुचिपूर्ण तरीके से किया जा सकता है लेकिन सिद्धांत एक ही –

1

मैं बहु डोमेन कुकी को संभालने के लिए कुछ स्क्रिप्ट किया है:

https://code.google.com/p/mudoco/

+0

बहुत अच्छा, इसे एक घुमाव देने के लिए जा रहा है बाद में, इसे गिटहब पर फेंक दो और मैं योगदान दूंगा –

0

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

  1. अपने पहले डोमेन पर जावास्क्रिप्ट का उपयोग कर उपयोगकर्ता के ब्राउज़र पर कुकी बनाएं।

  2. window.name का उपयोग कर विंडो के नाम को किसी अन्य डोमेन पर ले जाने के लिए विंडो का नाम सेट करें।

  3. चरण 2 डोमेन के प्रत्येक पृष्ठ पर किया जाना चाहिए जिसने कुकी बनाई है। यह सभी पृष्ठों पर एक जावास्क्रिप्ट फ़ाइल को कॉल करके आसानी से हो सकता है।

  4. जब आप किसी अन्य डोमेन पर जाते हैं, और उपर्युक्त कुकी मूल्य तक पहुंच बनाना चाहते हैं, तो window.namewindow के रूप में उपयोग करके इसे एक्सेस नहीं किया गया है।

  5. इस डोमेन पर नई कुकी बनाएं और इस मान को असाइन करें।

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