2009-03-13 12 views
59

मैं सभी उपयोगकर्ता डेटा के लिए php सत्र (कुकीज़ नहीं, सत्र आईडी कुकी को छोड़कर) का उपयोग करता हूं, और जब कोई उपयोगकर्ता अपनी प्रोफ़ाइल user.mydomain.com पर जाता है तो वे तुरंत "लॉग आउट" होते हैं तब तक उपडोमेन को हटा दें।PHP सत्रों को सबडोमेन तक ले जाने की अनुमति दें

वहाँ जब तक इसकी * .mydomain.com

+0

पहले, 'ini_set ('session.cookie_domain', '.example.com')', * तो * 'session_start()' या 'सत्र :: (शुरू)' से https://github.com/delight-im/PHP- कुकी – caw

उत्तर

74

यहाँ 4 हैं विकल्प के रूप में सभी डोमेन का सत्र स्वीकार करने के लिए एक रास्ता है।

प्लेस इस अपने php.ini में:

session.cookie_domain = ".example.com" 

या अपने .htaccess में:

php_value session.cookie_domain .example.com 

या अपनी स्क्रिप्ट में पहली बात यह है के रूप में:

ini_set('session.cookie_domain', '.example.com'); 

या में आपकी साइट के लिए आपका PHP-fpm पूल कॉन्फ़िगरेशन:

php_value[session.cookie_domain] = .example.com 
+2

दुर्भाग्य से सभी 3 काम करने में असफल रहे, क्या स्टार * होने की आवश्यकता है? – Anthony

+2

बहुत अजीब बात है, मैंने पहले उन तरीकों का उपयोग किया है और वे ठीक काम करते हैं। क्या आपको मौके से सुहोसिन स्थापित किया गया है, मुझे याद है कि ऐसी सेटिंग हो सकती है जिसे इसे बदलने के लिए बदला जाना आवश्यक है? यदि आप नहीं करते हैं, तो क्या आप अपने इंस्टॉल के बारे में अधिक जानकारी पोस्ट कर सकते हैं (उदाहरण के लिए apache, lighttpd, php संस्करण)? – CTT

+0

कुछ पैकेज सुहोसिन के साथ आते हैं। 'php -i | grep -i 'Suhosin' यह देखने के लिए कि क्या यह –

11
 if(isset($_COOKIE['session_id'])) 
      session_id($_COOKIE['session_id']); 
     Zend_Session::start(); //or session_start(); 
     if(!isset($_COOKIE['session_id'])) 
      setcookie('session_id', session_id(), 0, '/', '.yourdomain.com'); 

सुरक्षा क्षतिग्रस्त हो, यदि आप अपूर्ण या बुरे उत्तरों से निराश हैं, तो यह आपका उद्धारक है। यह सिर्फ काम करता है।

+0

यह मेरे लिए काम करता है, लेकिन मुझे सुरक्षा समस्या नहीं समझती है। क्या आप समझेंगे कि सुरक्षा समस्याएं क्या हो सकती हैं? – Neo

-3
if(isset($_COOKIE['session_id'])) 
    session_id($_COOKIE['session_id']); 
    Zend_Session::start(); //or session_start(); 

    if(!isset($_COOKIE['session_id'])) 
     setcookie('session_id', session_id(), 0, '/', '.yourdomain.com'); 

यह एक अच्छा समाधान है, लेकिन आप इसे सभी स्थितियों में उपयोग नहीं कर सकते हैं। उदाहरण के लिए यह काम नहीं करेगा जब आप गैर-सत्र कुकीज़ पर भरोसा नहीं कर सकते हैं।

यदि आप इसे सही तरीके से उपयोग करते हैं तो यह वास्तव में काम करना चाहिए।

ini_set('session.cookie_domain', '.example.com'); 

उदाहरण के लिए आप सभी फ़ाइलें फोन session_start()

4

में session_start() से पहले डाल दिया है और यह भी करने की जरूरत है मैं जानता हूँ कि यह काफी पुराना है - लेकिन आगे @ सीटीटी के सुझाव पर विस्तार करने के लिए - मैं एक php जोड़ने की जरूरत प्रत्येक उप निर्देशिका में .ini फ़ाइल (कि php कोड को क्रियान्वित किया जाएगा और सत्र की आवश्यकता है) निम्न पाठ के साथ मेरी उप डोमेन की:

suhosin.session.cryptdocroot=Off 
suhosin.cookie.cryptdocroot=Off 

मुझे आशा है कि इस मदद करता है (यह मेरे उम्र ले लिया इस यह पता लगाने की)।

+0

यह एक बुरा है, अब 2 घंटे के लिए डीबगिंग कर रहा है, क्योंकि सत्र स्थानीयकरण मेरे स्थानीय पर्यावरण पर ठीक काम कर रहा है। को पहले – weyandch

2

एक अन्य विकल्प है कि मेरे लिए काम किया: सत्र के नाम पर मजबूर करने के लिए है:

session_name("myWebsite"); 
session_start(); 
0

मैं सिर्फ इस समस्या थी और यह मैं दो अलग-अलग उप डोमेन के लिए अलग php.ini फ़ाइलों का उपयोग कर रहा था पता चला है । इन आईएनआई फाइलों ने अलग-अलग session.save_path चर निर्दिष्ट किए हैं। स्पष्ट कारणों से इसे सभी उप डोमेनों के लिए समान होना आवश्यक है जिन्हें सत्र साझा करने की आवश्यकता है।

5

परिवर्तन प्रमुख कार्यों के शीर्ष पर सत्र फ़ाइल नाम

तरह
session_name('mysession'); 

तो php पेज

session_set_cookie_params(0,"/",".example.com",FALSE,FALSE); 
    setcookie(session_name(), session_id(),0,"/","example.com"); 
    session_start(); 

में निम्न कोड का उपयोग अंत में उप डोमेन के डिफ़ॉल्ट सत्र नाम बदल और सबडोमेन के कोर फ़ंक्शंस फ़ाइल में डिफ़ॉल्ट कुकी को हटाएं जैसे:

/*default session name*/ 
session_name("mysession"); 
/*remove the PHPSESSID and default session name from subdomain's cookie*/ 
setcookie("mysession", "",1,"/"); 
setcookie("PHPSESSID", "",1,"/"); 

अगर आप PHPSESSID के रूप में अपने कुकी नाम उपयोग करने के साथ जारी रखने के लिए, बस फिर आपके ब्राउज़र के मौजूदा कुकी की जाँच

"mysession" string like session_name('mysession'), setcookie("mysession", "",1,"/"); 

साथ सभी कार्यों को दूर, बस डोमेन और उप डोमेन के सभी कुकी निकालना, और प्रक्रिया दोहराएं।

+0

से पहले सुहोसिन सेटिंग्स की जांच करनी चाहिए थी यह मेरे लिए काम करता था। इस प्रश्न में कोई अन्य जवाब काम नहीं किया। –

2

हाँ। ini_set काम कर रहा है। लेकिन यह देखने के लिए ब्राउज़र के सभी कैश और कुकीज़ को नष्ट करना याद रखें।

  1. , अपने xxx.example.com और yyy.example.com में सभी कैश और आपके ब्राउज़र
  2. के कुकीज़ को नष्ट अपने php फ़ाइलें इस तरह शुरू कर देना चाहिए।

    ini_set('session.cookie_domain', '.example.com'); session_start(); 
    
संबंधित मुद्दे