2009-12-28 8 views
7

क्या पथ का पैरामीटर $ _COOKIE [] में जोड़ा जा सकता है? ।PHP का उपयोग कर उसी डोमेन के विभिन्न पथों पर कुकी मानों तक कैसे पहुंचे?

+0

आपको ['$ कुकी-> सेटपाथ ($ पथ)'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie मिल सकता है।php # L104) उपयोगी है, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP- कुकी)। – caw

उत्तर

9

यदि आप मौजूदा डोमेन की तुलना में एक ही डोमेन पर एक अलग पथ के लिए कुकीज़ सेट तक पहुंचने का प्रयास कर रहे हैं, तो ऐसा नहीं किया जा सकता है। ब्राउज़र स्वयं ही इसे प्रतिबंधित करता है, और केवल वर्तमान पथ के लिए उपयुक्त कुकीज़ भेजता है।

+0

फेसबुक के बारे में क्या ?, फेसबुक डोमेन "facebook.com" के लिए कुकीज़ लिखता है, लेकिन यह इस कुकीज़ का उपयोग "www.facebook.com" – user962284

+0

@ user962284 से करता है क्या आप निश्चित हैं? मुझे पूरा यकीन है कि एफबी www.facebook.com पर सभी कुकीज़ सेट करता है, क्योंकि facebook.com तक पहुंचने के लिए भी संभव नहीं है (वे आपको www पर रीडायरेक्ट करते हैं।) –

+0

यह गलत है। आरएफसी * की सिफारिशों के बाद एक ब्राउज़र * एक ही नाम के साथ एक से अधिक कुकी के मामले में दोनों मान वापस भेजता है लेकिन अलग-अलग पथ। यह वास्तव में PHP है जो रास्ते में हो जाता है; कृपया मेरा पोस्ट जवाब देखें। –

2

हाँ, यह 4 तर्क है, लेकिन आप केवल कुकी उपयोग करने में सक्षम हो सकता है अगर यह एक रास्ता है कि वर्तमान निर्देशिका में रहता है का उपयोग कर स्थापित किया गया था

कि भ्रामक है ... यहाँ यह php से है:

सर्वर पर पथ जिसमें कुकी उपलब्ध होगी। यदि '/' पर सेट किया गया है, तो कुकी पूरे डोमेन के भीतर उपलब्ध होगी। यदि '/ foo /' पर सेट किया गया है, तो कुकी केवल /foo/निर्देशिका और सभी उप-निर्देशिका जैसे /foo/bar/डोमेन के भीतर उपलब्ध होगी। डिफ़ॉल्ट मूल्य आप इसे किसी अन्य कुकी की तरह का उपयोग वर्तमान निर्देशिका कि कुकी में स्थापित किया जा रहा है।

http://php.net/manual/en/function.setcookie.php

। यदि स्क्रिप्ट के पास इसका उपयोग है तो यह $ _COOKIE में उपलब्ध हो जाएगा।

+0

मेरा मतलब है कि इसे कैसे पढ़ा जाए, कुकी पथों को विभिन्न पथों में कैसे पहुंचाया जाए, लेकिन उसी डोमेन नाम पर? – Steven

+0

उन्हें कैसे अंतरित करें? – Steven

+0

PHP आपके लिए ऐसा नहीं करता है। आपको इसे स्वयं लागू करना होगा। – Galen

2

नहीं, ऐसे पैरामीटर असंभव हैं क्योंकि ब्राउज़र सर्वर के लिए पथ नहीं भेजता है। यह केवल प्रत्येक कुकी का नाम और मान भेजता है (इसलिए यदि आप सत्र कुकी नहीं करते हैं, तो यह पथ नहीं देख सकता है, जब यह समाप्त हो जाएगा और इसी तरह)।

2

मुझे नहीं लगता कि कुकी को एक अलग पथ से प्राप्त करना संभव होगा, क्योंकि इससे संभवतः सुरक्षा समस्या हो सकती है।

4

जबकि HTTP क्लाइंट (यानी ब्राउज़र) कुकी को सेट करने के पथ को वापस नहीं भेजता है, तो PHP वास्तव में $ _COOKIE सरणी के संबंध में कुकीज़ के बारे में धारणा करता है।

आप मूल्य पथ / के साथ "पहले मूल्य" के साथ एक और मूल्य पथ /परीक्षण साथ "दूसरे मूल्य" के साथ दूसरे ही नाम के दो कुकीज़, सेट करते हैं, एक ब्राउज़र निम्नलिखित अनुशंसित - लेकिन आवश्यक नहीं - आरएफसी से व्यवहार आपको दोनों मूल्य वापस भेज देगा। $ _COOKIE [ 'नाम'] केवल शामिल होंगे -

Cookie: name=second-value, name=first-value 

"समस्या" है कि PHP केवल प्रथम मान पढ़ता है: आप /परीक्षण पथ के अंतर्गत एक यूआरएल पर पहुंचते हैं, ब्राउज़र इस भेजता है मूल्य "दूसरा-मूल्य" कोई संकेत नहीं है कि "प्रथम-मूल्य" मौजूद है। यदि आपको दोनों मानों तक पहुंच की आवश्यकता है, तो आपको $ _SERVER ['HTTP_COOKIE'] के मान को पार्स करने की आवश्यकता है - इसमें उपरोक्त उदाहरण के लिए "name = second-value, name = first-value" होगा। ध्यान दें कि "दूसरा-मूल्य" पहली पंक्ति में है क्योंकि इसे लंबे पथ के साथ सेट किया गया था। कृपया ध्यान दें कि आरएफसी इस व्यवहार की गारंटी नहीं देता है, यह केवल इतना कहता है कि HTTP क्लाइंट ऐसा करना चाहिए।

+0

दिलचस्प, यह उपनिर्देशिका के लिए विशिष्ट है? जैसा कि, एक उपनिर्देशिका के लिए अनुरोध रूट की कुकीज़ प्राप्त करेगा, लेकिन रूट के लिए अनुरोध उपनिर्देशिका के लिए कुकीज़ प्राप्त नहीं करेगा? इसके अलावा मैं उत्सुक हूं कि ब्राउज़र वास्तव में इसे लागू करते हैं या नहीं :) –

+0

सही, एक उपनिर्देशिका या लंबा पथ हमेशा एक छोटे से पथ के साथ एक कुकी प्राप्त करेगा जो मेल खाता है। सभी ब्राउज़रों को इस तरह से लागू किया जाता है। एकमात्र चीज जो गारंटीकृत व्यवहार नहीं है, यदि आपके पास एक ही नाम के साथ कई कुकीज़ हैं लेकिन अलग-अलग पथ हैं - आपको * दोनों कुकीज को एक निश्चित क्रम में वापस प्राप्त करना चाहिए, लेकिन आरएफसी कोई वादा नहीं करता है। –

+0

यह वास्तव में सही उत्तर है क्योंकि यह एक पूर्ण स्पष्टीकरण देता है कि ऐसा क्यों होता है। मुझे ध्यान रखना चाहिए, और यह गुम है, हालांकि आप '$ _COOKIE []' पथ नहीं बता सकते हैं, आप 'setcookie' पथ को बता सकते हैं। हम एक एपीआई के साथ इसका सामना कर रहे हैं। तो आप रूट पथ को सेट करने के लिए वास्तव में 'सेटकुकी' बता सकते हैं और फिर इसे कहीं भी एक्सेस कर सकते हैं: 'setcookie (' name ',' data ', expire,'/') '। वह अंतिम पैरामीटर पथ है और इसे '/' पर सेट करना रूट पथ बनाता है। यह ओपी की समस्या को हल करेगा। – jfreak53

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