2012-03-12 14 views
5

मुझे उप-मुख्य डोमेन कुकीज़ मौजूद होने पर उच्च प्राथमिकता के साथ मेरे उप डोमेन के लिए मुख्य डोमेन कुकीज़ का उपयोग करने की आवश्यकता है।PHP में मौजूदा उप डोमेन कुकी के साथ उप डोमेन से मुख्य कुकी कैसे पढ़ा जाए?

समस्या

है जब मैं पर sub.domain.com और वहाँ कुकीज़ के लिए

  • sub.domain.com
  • .domain.com

पीएचपी मौजूद हूँ वैश्विक $_COOKIE में $_COOKIE['data'] == 'sub.domain.com' शामिल हैं। मैं यह देखना चाहता हूं कि है .domain.com कुकी और इसका उपयोग करें।

जब मैं मौजूदा उप डोमेन कुकी के साथ उप डोमेन पर हूं तो मैं मुख्य कुकी कैसे पढ़ूं?

उत्तर

2

एक $_SERVER ['HTTP_COOKIE'] चर है जिसमें एक ही स्ट्रिंग के समान नाम के साथ उप डोमेन और मुख्य डोमेन कुकी चर दोनों शामिल हैं। कोड की निम्न सरल टुकड़ा में $cookie_variable सरणी विशिष्ट चरों के दोनों मूल्यों में शामिल होंगे:

if('sub.domain.com' == $_SERVER['HTTP_HOST']) { 
    $var_name = 'somedata'; 
    $domains_counter = 0; 
    foreach(explode(';', $_SERVER['HTTP_COOKIE']) as $cookie_variable_string) { 
    if(false !== strpos($cookie_variable_string, $var_name.'=')) { 
     $cookie_variable[$domains_counter] = urldecode(
      trim(
       substr(
        $cookie_variable_string, 
        strpos($cookie_variable_string, $var_name) + strlen($var_name.'=') 
      ) 
     ) 
    ); 
     $domains_counter++; 
    } 
    } 
    var_dump($cookie_variable); 
} 

यहाँ एक समारोह है कि सभी चर हो जाता है:

public static function get_http_cookie_variables() { 
    $domains_counter = []; 
    foreach(explode(';', $_SERVER['HTTP_COOKIE']) as $cookie_variable_string) { 
    $key_value = explode('=', $cookie_variable_string); 
    $cookie_var_name = trim($key_value[0]); 
    if(is_null($domains_counter[$cookie_var_name])) { 
     $domains_counter[$cookie_var_name] = 0; 
    } 
    $http_cookie_variables[$cookie_var_name][$domains_counter[$cookie_var_name]] = urldecode(trim($key_value[1])); 
    $domains_counter[$cookie_var_name]++; 
    } 

    return $http_cookie_variables; 
} 
+0

get_http_cookie_variables() फ़ंक्शन विफल रहता है क्योंकि $ domains_counter प्रारंभ नहीं किया गया है। मैंने बस इसे पूरी तरह से हटा दिया क्योंकि मुझे इसमें रूचि नहीं है। – user603749

4

ऐसा लगता है कि आपकी समस्या का सारांश sub.comdomain.com से डोमेन.com में एक कुकी सेट पढ़ रहा है।

अपने php.ini को

session.cookie_domain = .domain.com

जोड़े ऐसा करने के लिए।

ini_set("session.cookie_domain", ".domain.com");

अब आप उप डोमेन पर domain.com द्वारा निर्धारित कुकीज़ उपयोग करने में सक्षम होना चाहिए: आप एक साझा होस्टिंग वातावरण पर हैं और आपकी INI फ़ाइल को संशोधित नहीं कर सकते हैं, अपने कोड में यह कहीं होने की कोशिश .domain.com।

+0

उत्तर के लिए धन्यवाद, लेकिन यह भी वैश्विक परिवर्तन है कि यदि संभव हो तो मैं इससे बचना पसंद करता हूं, क्योंकि यह सभी उप डोमेन के लिए सत्र वैश्विक बनाता है। मैं सत्रों को उप डोमेन के लिए अलग करना चाहता हूं। मुझे केवल मुख्य डोमेन की कुकी के हिस्से को पढ़ने की आवश्यकता है। मैं पहले से ही मुख्य डोमेन कुकी तक पहुंचने में सक्षम हूं, लेकिन केवल अगर कोई उप डोमेन कुकी नहीं है, तो सर्वर द्वारा पसंदीदा किसी कारण से। क्या एक ही समय में दोनों कुकीज पढ़ने का कोई तरीका है? – mvladk

+0

'ini_set()' विधि का उपयोग करके यह सुनिश्चित करना चाहिए कि कॉन्फ़िगरेशन परिवर्तन केवल आपकी साइट को अनुरोध की अवधि के लिए प्रभावित करे (यदि आप चिंतित हैं कि परिवर्तन आपके सर्वर पर चलने वाली अन्य साइटों को प्रभावित करेंगे)। –

+0

जहांुफर आपको बहुत धन्यवाद! मैं आपकी भागीदारी की बहुत सराहना करता हूं। – mvladk

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