2008-09-20 7 views
21

शीर्षक में प्रश्न।

और क्या होता है जब $_GET[foo], $_POST[foo] और $_COOKIE[foo] exist? के सभी 3 कौन सा उनमें से एक $_REQUEST?

+1

php.ini में gpc_order के अनुसार चर को ओवरराइट किया गया है, आपको उद्धरणों के साथ अपने चर का उपयोग करना चाहिए: $ _GET ['foo'] –

उत्तर

49

मैं कभी नहीं कहेंगे।

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

इसे इस तरह से काम नहीं करना चाहिए:

$ _GET = गैर विनाशकारी कार्यों (, छंटाई रिकॉर्डिंग कार्यों, प्रश्नों)

$ _POST = विनाशकारी कार्यों (हटाने, अद्यतन करने)

$ _COOKIE = तुच्छ सेटिंग्स (स्टाइलशीट वरीयताओं आदि)

$ = _SESSION गैर तुच्छ सेटिंग्स (उपयोगकर्ता नाम, में लॉग इन?, एक्सेस स्तर)

+0

जीईटी बनाम POST विधियों पर उत्कृष्ट बिंदु, वे अलग-अलग हैं प्रयोजनों। कुछ वेब एप्लिकेशन इन दिनों इस तरह से काम करते हैं, हालांकि ... –

+0

मैंने हमेशा सोचा था कि अगर आप चीजों को हटाने के लिए उपयोग करते हैं, तो बॉट उन लिंक को क्रॉल कर सकता है और इसलिए डेटाबेस में सब कुछ हटा सकता है ... एक डरावनी कहानी की तरह लग रहा है , इसलिए मैं हमेशा ऊपर स्कीमा पर अटक गया है। –

+0

हम अपने काम पर बस इसके साथ संघर्ष कर रहे हैं। हमारा उत्पाद एक सीएमएस प्रणाली है जो उपर्युक्त नियम का पालन नहीं करता है। हम अपने ग्राहकों को Google मिनी उपकरण www.google.com/enterprise/mini/ प्रदान करना चाहते हैं, लेकिन यह एक सीएमएस एक्स्ट्रानेट को क्रॉल करना असंभव है क्योंकि सभी नरक ढीले हो जाएंगे:/ –

2

करने के लिए शामिल हो जाता है जब आप कुछ जहां मूल्यों भर जाती है नहीं कर रहे हैं या जब आप उन दोनों से अधिक का उपयोग करें और लूप करना चाहते हैं पोस्ट और जीईटी दोनों तरीकों से सभी मूल्य।

7

कभी कभी तुम चाहते हो सकता है एक ही स्क्रिप्ट कई अलग अलग तरीकों के साथ कहा जाता है। एक फॉर्म जमा करें और एक AJAX कॉल दिमाग में आता है। ज्यादातर मामलों में, हालांकि, यह स्पष्ट होना बेहतर है।

इसके अलावा, कैसे चर के विभिन्न स्रोतों के लिए एक दूसरे के ऊपर लिख अगर वहाँ एक नाम टक्कर है पर http://docs.php.net/manual/en/ini.core.php#ini.request-order देखते हैं।

4

$_REQUEST केवल एक आप, पोस्ट का परीक्षण हो और डेटा इनमें से किसी भी से भी आ सकता है, तो खाना पकाने से रोकने के लिए शॉर्टकट है।

  • डेटा प्राप्त, पोस्ट और अंत में कुकी से लिया जाता है:

    कुछ नुकसान कर रहे हैं। आखिरी ओवरराइड पहले, इसलिए इसके साथ सावधान रहें।

  • REST आर्किटेक्चर पोस्ट को अलग करने और अर्थशास्त्र प्राप्त करने की आवश्यकता है, तो आप उस मामले में $_REQUEST पर भरोसा नहीं कर सकते हैं।

फिर भी, यदि आप जानते हैं कि आप क्या कर रहे हैं, तो यह सिर्फ एक और काम पीएचपी चाल है।

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

  • अपने नियंत्रक में, यह तय करने के लिए कि कौन सा पृष्ठ किसी फ़ॉर्म एक्शन या हाइपरटेक्स्ट लिंक से अनुरोध करता है, यह जांचने के लिए कौन सा पृष्ठ सेवा करेगा। यदि कोई सत्र रास्ता सत्र id की परवाह किए बिना अभी भी सक्रिय है का संचरण होता है
  • जांच करने के लिए।

1

मैं पोस्ट का उपयोग करता हूं जब मैं नहीं चाहता कि लोगों को पास होने वाली आसान पहुंच हो और मैं उन्हें यूआरएल में मूल्य देखने में कोई फर्क नहीं पड़ता। मैं आमतौर पर कुकीज़ का अधिक उपयोग नहीं करता क्योंकि मुझे लगता है कि सत्र लगातार मूल्यों के लिए ठीक है (हालांकि उचित रजिस्ट्री होने का इसका उपयोग करने का सबसे अच्छा तरीका है)।

4

"सभी 3 मौजूद होने पर क्या होता है" प्रश्न का उत्तर देने के लिए, जवाब "यह निर्भर करता है।"

PHP.इनआई में अनुरोध_ऑर्डर निर्देश (या चर__ऑर्डर अगर अनुरोध_ऑर्डर अनुपस्थित है) के आधार पर PHP $ _REQUEST भरता है। डिफॉल्ट आमतौर पर "जीपीसी" होता है जिसका अर्थ है कि जीईटी पहले लोड होता है, फिर पोस्ट लोड हो जाता है (अगर टकराव होता है तो ओवरराइटिंग प्राप्त होता है), तो कुकीज़ लोड हो जाती हैं (टकराव होने पर ओवरराइटिंग प्राप्त/पोस्ट करें)। हालांकि, आप इस निर्देश को PHP.INI फ़ाइल में बदल सकते हैं। उदाहरण के लिए, इसे "सीपीजी" में बदलना कुकीज़ को पहले लोड करता है, फिर पोस्ट करें, फिर प्राप्त करें।

जहां तक ​​इसका उपयोग करना है? मैं "कभी नहीं" की भावना को प्रतिबिंबित करूंगा। आप पहले से ही उपयोगकर्ता पर भरोसा नहीं करते हैं, तो उपयोगकर्ता को अधिक टूल क्यों दें? डेवलपर के रूप में, आपको पता होना चाहिए कि आप कहां से आने की उम्मीद करते हैं। यह आपके हमले की सतह क्षेत्र को कम करने के बारे में है।

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