2010-02-26 19 views
13

यह क्यों है कि यदि मैं www.example.com पर कुकी बनाता हूं और example.com पर इसकी जांच करता हूं, तो कुकी मौजूद नहीं होती है? मैं सिर्फ .htaccess का उपयोग करने की योजना बना रहा हूं, www www पर गैर-www को रीडायरेक्ट करें। लेकिन मैं इसे कैसे हल करूं?PHP कुकी समस्या - www या www

+0

आपको कुकी डोमेन को स्पष्ट रूप से सेट करना होगा। या https://github.com/delight-im/PHP- कुकी जैसी कुछ का उपयोग करें जो स्वचालित रूप से "www" बनाम "गैर-www" केस को संभालता है। – caw

उत्तर

32

ब्राउज़र यहां मुख्य अपराधी हैं, PHP नहीं। वे डोमेन द्वारा स्टोर करते हैं, और यह नहीं जानते कि www एक विशेष मामला है; उनके परिप्रेक्ष्य से, www.mydomain.com और mydomain.com अलग-अलग तार हैं, और इसलिए अलग-अलग सुरक्षा नीतियां हैं। हालांकि, ऐसा कुछ है जो आप कर सकते हैं।

कुकी सेट करते समय, .mydomain.com (अग्रणी बिंदु के साथ) का उपयोग करें। यह आपके उपयोगकर्ता के ब्राउज़र को कुकी को mydomain.com तक पहुंचने और www समेत सभी सबडोमेन को बताएगा। PHP के setcookie में तर्क $domain है, लेकिन यह सूची में पांचवां है, इसलिए आपको $expire और $path को अपने डिफ़ॉल्ट मानों पर सेट करने के लिए सेट करने की आवश्यकता हो सकती है।

setcookie('name', 'value', time()+3600, '/', '.mydomain.com'); 

स्थिरता के लिए, तथापि, आप, यानि कि एक विशिष्ट डोमेन के लिए सभी वेब यातायात रीरूटिंग विचार करने के लिए www.mydomain.com, या इसके विपरीत करने के लिए mydomain.com यातायात भेजने चाह सकते हैं। एसईओ का मेरा अस्पष्ट ज्ञान (गलत होने पर संपादित करें) मुझे बताता है कि यह सहायक है ताकि डुप्लिकेट सामग्री न हो, और यह आपको ऐसे सभी प्रमाणीकरण मुद्दों को बचाता है। इसके अतिरिक्त, यदि आप सबडोमेन पर संपत्तियां संग्रहीत करते हैं, तो वहां पर कुकीज़ रखने से प्रत्येक बार परिवहन करने के लिए यातायात धीमा हो जाता है, इसलिए केवल www पर एप्लिकेशन कुकीज़ संग्रहीत करने से आप उस गति को बढ़ावा देते हैं।

Here is a tutorial on how to accomplish such a redirect in Apache.

+0

आप एसईओ सामान पर बंद हैं। इससे कोई फर्क नहीं पड़ता कि आप www के साथ या उसके बिना ऐसा करना चुनते हैं; जब तक आप एक चुनते हैं और इसके साथ चिपके रहते हैं। – NotMe

+0

सामान्यीकृत करने के लिए संपादित :) – Matchu

+0

www। * एक विशेष मामला नहीं है। यह एक सम्मेलन है, लेकिन इसका http/कुकी आरएफसी में कोई संहिताबद्ध अर्थ नहीं है।ब्राउज़र के जादुई रूप से www विशेष उपचार देने के लिए यह बहुत बेतुका होगा। भले ही, +1। –

-2

क्योंकि php mydomain.com से अलग www.mydomain.com का अनुवाद करता है। यदि डोमेन 100% समान नहीं हैं तो कुकी मेल नहीं खाती है।

और मुझे यकीन है कि ब्राउजर सर्वर को ओवरराइट करने की अनुमति देने से पहले डोमेन नाम के 100% मैच को भी देखता है।

बस रीडायरेक्ट करने के लिए .htaccess का उपयोग करें। यह सभी ब्राउज़रों में इससे निपटने का एकमात्र सही तरीका है।

+0

किसी अवधि के साथ डोमेन को उपसर्ग करना समस्या को हल करता है। सटीक मिलान की आवश्यकता नहीं है। – TheJacobTaylor

+1

"क्योंकि PHP अनुवाद करता है" ... इसमें PHP और ब्राउज़र के साथ सबकुछ करने के लिए कुछ भी नहीं है। ब्राउज़र वेबसाइट पर मौजूद प्रत्येक कुकी को नहीं भेजते हैं। वे केवल उन डोमेन को चुनते हैं जिनमें डोमेन नाम मिलान होते हैं। – NotMe

0

मेरा मानना ​​है कि आप (वास्तव में .example.com) example.com पर कुकी सेट कर सकते हैं और अगर वे www.example.com के लिए जाना यह भेजा जाएगा, लेकिन इसके विपरीत नहीं। यह मानक सुरक्षा नीति उपयोगकर्ताओं के निजी डेटा को अनचाहे सर्वर पर भेजने से रोकने के लिए है।

व्यक्तिगत रूप से, मैं अपने apache2.conf में VirtualHosts का उपयोग करें:

<VirtualHost *:80> 
    ServerName example.com 
    RedirectMatch (.*) http://www.example.com$1 
</VirtualHost> 

... इस उदाहरण में, हर कोई जैसे लोड करने का प्रयास http://example.com/index.html को http://www.example.com/index.html पर रीडायरेक्ट किया गया है।

1
setcookie("CookieName", "value", time()+3600, "/", ".mydomain.com"); 
संबंधित मुद्दे