2013-01-07 30 views
17

मैं मूल्य के बिना जीईटी पैरामीटर का उपयोग कर यूआरएल के बारे में अपने मालिक के साथ थोड़ा तर्क में हूं। जैसेक्या कोई मूल्य नहीं है, तो एक जीईटी पैरामीटर (यूआरएल में) का उपयोग करने के लिए यह एक बुरा अभ्यास है?

http://www.example.com/?logout

मैं लिंक इस तरह की काफी अक्सर वेब पर देखते हैं, लेकिन निश्चित रूप से, यह यह एक अच्छी बात है मतलब यह नहीं है। उन्हें डर है कि इस मानक नहीं है और अप्रत्याशित त्रुटियों का कारण बन सकता है, तो वह मेरे जैसे कुछ का उपयोग करने के बजाय चाहते हैं:

http://www.example.com/?logout=yes

मेरे अनुभव में, मैं खाली पैरामीटर का उपयोग कर किसी भी समस्या का सामना करना पड़ा कभी नहीं किया है, और वे कभी-कभी मुझे अधिक समझते हैं (जैसे इस मामले में, जहां ?logout=no कोई समझ नहीं लेता है, इसलिए "लॉगआउट" का मान अप्रासंगिक है और मैं केवल पैरामीटर सर्वर-साइड की उपस्थिति के लिए परीक्षण करता हूं, न कि इसके लिए मूल्य)। (यह क्लीनर भी दिखता है।)

हालांकि मुझे यह पुष्टि नहीं मिल रही है कि इस तरह का उपयोग वास्तव में मान्य है और इसलिए वास्तव में कोई समस्या नहीं हो सकती है।

क्या आपके पास इसके बारे में कोई लिंक है?

+1

जब तक आप सिर्फ 'isset का उपयोग कर रहे ($ _ प्राप्त [ 'लॉगआउट']);' और आप उस के साथ खुश हैं, मुझे कोई समस्या नहीं दिख रहा है । –

+0

बिल्कुल मैं क्या कर रहा हूं। :) – s427

उत्तर

16

आरएफसी 2396, "यूनिफ़ॉर्म रिसोर्स पहचानकर्ता (URI): जेनेरिक सिंटेक्स", §3.4, "क्वेरी घटक" क्वेरी स्ट्रिंग के बारे में जानकारी की आधिकारिक स्रोत है, और कहता है:

क्वेरी घटक है संसाधन द्वारा व्याख्या की जाने वाली जानकारी की एक स्ट्रिंग।

[...]

एक प्रश्न घटक के भीतर, वर्ण ",", "/", "?" ":", "@", "&" "=", " + ",", ", और" $ "आरक्षित हैं।

आरएफसी 2616, "हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल - HTTP/1.1", §3.2.2, "http URL", इसे फिर से परिभाषित नहीं करता है।

संक्षेप में, आपके द्वारा दी गई क्वेरी स्ट्रिंग ("लॉगआउट") पूरी तरह मान्य है।

+2

सटीक संदर्भ के लिए धन्यवाद नहीं है। :-) यदि कोई दिलचस्पी लेता है तो यहां सीधा लिंक है: https://tools.ietf.org/html/rfc2396#page-15। यह भी प्रासंगिक: https://tools.ietf.org/html/rfc1738#page-9 (किसी अन्य उत्तर में उल्लिखित)। – s427

3

यह बिल्कुल ठीक है, और कोई त्रुटि नहीं होगी। हालांकि, आजकल अधिकांश ढांचे एमवीसी आधारित हैं, इसलिए यूआरएल में आपको नियंत्रक और एक्शन का उल्लेख करने की आवश्यकता है, इसलिए यह /users/logout (बीटीडब्लू, स्टैक ओवरव्लो यूजर यूआरएल को लॉग आउट करने के लिए यूआरएल का उपयोग करता है;) की तरह दिखता है।

बयान यह कारण हो सकता है कि त्रुटियों मेरे लिए की तरह अपने अनुप्रयोगों मैन्युअल कच्चे $_GET का उपयोग लगता है, और मैं निश्चित रूप से लगता है कि एक रूपरेखा के बिना एप्लिकेशन बना (जो आमतौर पर एक MVC ढेर और एक रूटर/डिस्पैचर प्रदान करता है) है यहाँ असली खतरनाक बात है।

+0

"असली खतरनाक चीज़" जैसा कि "यदि आपको वास्तव में अपने उदाहरण में कुछ खतरनाक होना चाहिए", या जैसा कि "यह कभी नहीं करता"? – s427

+0

पूर्व :) फिर भी, सादे PHP, या वेनिला जेएस में विकसित, या फिर भी किसी भी पुस्तकालय के बिना केवल एक प्रोग्रामिंग भाषा का उपयोग कर स्पष्ट resons – Raffaele

7

कोई मान नहीं होने के कारण आवश्यक है। यह यूआरएल को कम वैध बनाता है, यूआरएल RFC1738 इसे यूआरएल के आवश्यक भाग के रूप में सूचीबद्ध नहीं करता है।

यदि आपको वास्तव में कोई मूल्य की आवश्यकता नहीं है, तो यह केवल वरीयता का मामला है।

http://example.com/?logout 

बस के रूप में ज्यादा

http://example.com/?logout=yes 

के रूप में एक मान्य URL है सभी अंतर यह है कि बनाता है कि आप यह सुनिश्चित करना चाहते हैं कि "हाँ" बिट बिल्कुल स्थापित किया गया था, तो आप यह है के लिए जाँच कर सकते हैं मूल्य। जैसा:

if(isset($_GET['logout']) && $_GET['logout'] == "yes") { 
    // Only proceed if the value is explicitly set to yes 

आप सिर्फ जानना चाहता logout कुंजी URL में कहीं स्थापित किया गया था, तो चाहते हैं, यह सिर्फ यह करने के लिए आवंटित कोई मूल्य नहीं के साथ कुंजी को सूचीबद्ध करने के पर्याप्त होगा। फिर आप इस तरह यह जांच कर सकते हैं:

if(isset($_GET['logout'])) { 
    // Continue regardless of what the value is set to (or if it's left empty) 
+0

धन्यवाद। आपके द्वारा दिए गए लिंक को ब्राउज़ करना, मुझे https://tools.ietf.org/html/rfc2396#page-15 भी मिला जो किसी अन्य उत्तर में उल्लिखित है। – s427

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

  • कोई संबंधित समस्या नहीं^_^