2009-07-05 11 views
23

मुझे एक छोटी सी समस्या है।क्रॉस डोमेन कुकीज़

मैं एकाधिक डोमेन के लिए कुकी कैसे सेट करूं?

मैं सुरक्षा समस्याओं को समझता हूं, और मुझे यकीन है कि यह पहले किया गया है। इसका कारण एसएसओ है।

यानी।

domain.com, domain1.com, domain2.com:

account.domain.com डोमेन के लिए में लॉग इन स्थापित करने के लिए की आवश्यकता होगी।

क्या PHP और कुकीज़ या किसी भी विकल्प का उपयोग करके कोई आसान तरीका है?

+0

यहां स्टैक ओवरफ्लो पर एक और पोस्ट है जो दिखाती है कि फेसबुक कैसे करता है, और हाँ, यह iframes और जावास्क्रिप्ट के साथ संभव है। http://stackoverflow.com/questions/4701922/how-does-facebook-set-cross-domain-cookies-for-iframes-on-canvas-pages – inorganik

+0

[HTTP राज्य प्रबंधन तंत्र RFC6265] (http: // tools। ietf.org/html/rfc6265) – hakre

उत्तर

28

domain.com.com के लिए कुकी सेट करने के लिए डोमेन.com के लिए बिल्कुल कोई रास्ता नहीं है। आप जो करने का प्रयास कर रहे हैं केवल उपयोगकर्ता के ब्राउज़र को प्रत्येक डोमेन के अनुरोध सबमिट करने के लिए हल किया जा सकता है जो उसके बाद अपनी कुकी सेट करेगा।

फिर आपको प्रत्येक डोमेन के उपयोगकर्ता की पहचान सत्यापित करने के लिए एक तरीका चाहिए। इस के लिए दो दृष्टिकोण हैं:

  1. वापस चैनल - साइटों निर्धारित करने के लिए एक उपयोगकर्ता के प्रवेश सीधे एक दूसरे से संपर्क
  2. GET या POST में एक टोकन पासिंग - जब उपयोगकर्ता की broweser पर भेज दिया जाएगा। दूसरी साइट पर डिजिटल हस्ताक्षरित पैरामीटर पास होता है जिसमें पहचान और सत्र स्थिति होती है।

यह वास्तव में काफी जटिल है। मेरा सुझाव है कि आप अपना खुद का रोल न करें। मैं जो वर्णन कर रहा हूं उसके PHP कार्यान्वयन के लिए SimpleSAMLPHP पर एक नज़र डालें।

+0

यहां एक और तरीका है, domain.com से कनेक्ट करने के लिए डोमेन.com प्राप्त करें और टोकन प्राप्त करें, फिर जेएस कॉल के शीर्षलेख में या एक अलग फ़ील्ड के रूप में उस टोकन को पास करें, तो डोमेन 1.com को उस टोकन को देखना चाहिए और तदनुसार जवाब दें। क्या इसका कोई मतलब है? – Hafiz

5

क्या आप प्रयास कर रहे हैं नहीं किया जा सकता। (यह एक ब्राउज़र सुरक्षा समस्या है, एक PHP नहीं।)

ऑफ़-साइट प्रमाणीकरण के कुछ रूपों का उपयोग करने के अलावा, निकटतम आप प्राप्त कर सकते हैं उप-डोमेन में एक कुकी को सुलभ बना रहा है, इस मामले में आप बस इसका उपयोग करते हैं PHP के set_cookie फ़ंक्शन का वैकल्पिक 'डोमेन' तर्क।

5

यह एक मास्टर के रूप में कार्यरत एक डोमेन और गुलाम जैसे अन्य लोगों के माध्यम से किया जा सकता है।

कहें कि हमारे पास डोमेन accounts.domain.com है और यह हमारा स्वामी है।

तब हम अपने दास domain.com, something.com और another.com

मिल गया है जब आप domain.com पर लॉग ऑन करें करेंगे, यह वास्तव में हो जाएगा साइट accounts.domain.com, तो आप के लिए अद्वितीय ID के साथ कुकी मिलेगा आपका ब्राउज़र और फिर आपको डोमेन.com के पोस्ट-लॉगऑन लैंडिंग पृष्ठ पर रीडायरेक्ट किया जाएगा (यानी domain.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>)। लैंडिंग पृष्ठ accounts.domain.com से संपर्क करेगा, इसे ब्राउज़र आईडी से पूछताछ करेगा। यदि लेनदेन ठीक है, तो आपको domain.com से लॉगऑन कुकी मिल जाएगी।

अगला, प्रत्येक डोमेन (domain.com, something.com और another.com) पर प्रारंभिक रीडायरेक्ट accounts.domain.com/roaming-check?return-url=<URL the redirect was initiated from> पर रीडायरेक्ट किया जाएगा।चूंकि हम घर लौट रहे हैं (हम पहले से ही accounts.domain.com पर लॉग इन हैं), हमें फिर से हमारे लैंडिंग पृष्ठ (<domain name>.com/logon?check=true&unique-id=<browser unique id>&request-id=<unique request ID>) पर रीडायरेक्ट किया जाएगा और इस बिंदु से यह लॉगिंग के साथ भाग के समान ही है। हम निर्बाध रूप से किसी अन्य डोमेन पर घूम रहे हैं (उपयोगकर्ता को यह जानने के बिना कि ब्राउजर आमतौर पर रीडायरेक्ट पेज नहीं दिखाते हैं जब तक कि यह हेडर भेजता है (सर्वर)/प्राप्त (ब्राउज़र) अनुभाग)।

मामले में वास्तव में कोई सक्रिय लॉगऑन नहीं है, साइट सत्र को यह "नकारात्मक लॉगऑन" की बचत होगी और अब और logon (जब तक हम logon या किसी अन्य डोमेन लोड करने का प्रयास) की जाँच की कोशिश नहीं।