- क्या वास्तव में के माध्यम से व्यावहारिक रूप से होता है "कुकी का मान स्वचालित रूप से कुकी भेजने urlencoded, और स्वचालित रूप से जब प्राप्त डीकोड"?
इसका मतलब है कि आपको विशेष पात्रों के बारे में चिंता करने की आवश्यकता नहीं है।
ध्यान दें कि कुकीज एक PHP अवधारणा नहीं है; वे HTTP प्रोटोकॉल का विस्तार कर रहे हैं। और प्रत्येक प्रोटोकॉल में एक कठोर संरचना होती है जिसे आपको अनुपालन करने की आवश्यकता होती है, या यह बस काम नहीं करेगी। यह संरचना delimiters - पात्रों, या वर्णों के अनुक्रमों पर निर्भर करती है जिनके पास उस प्रोटोकॉल के भीतर उन्हें निर्दिष्ट विशेष अर्थ है।
यह अनिवार्य है कि प्रत्येक प्रोटोकॉल के माध्यम से स्थानांतरित डेटा में उन विशेष chracters शामिल होंगे, और यही कारण है कि एन्कोडिंग आवश्यक है।
उदाहरण के लिए, अर्धविराम (;
) Set-Cookie
HTTP Header में एक विभाजक के रूप में प्रयोग किया जाता है, इसलिए यदि आपकी कुकी मूल्य यह होता है, यह एनकोड करने की आवश्यकता है या नहीं तो कुकी को ठीक ढंग ब्राउज़र द्वारा नहीं पार्स की जाने वाली जब वे इसे प्राप्त ।
आप एन्कोडिंग के बिना foo;bar
के एक मूल्य के साथ कुकी, भेजते हैं, तो ब्राउज़र मूल्य foo
के रूप में यह व्यवहार करेगा एक bar
झंडा इसे से जुड़े के साथ।
डेटा के हिस्से के रूप में आप ;bar
खो देंगे, और bar
प्रोटोकॉल के अनुसार एक अज्ञात ध्वज है, ब्राउज़र बस इसे अनदेखा कर देंगे, इसलिए आपको यह भी पता नहीं होगा कि कोई त्रुटि हुई है।
PHP setcookie()
के साथ कुकी सेट करते समय स्वचालित रूप से एन्कोडिंग करेगा, और जब आप $_COOKIE
सुपर-ग्लोबल से पढ़ते हैं तो स्वचालित रूप से इसे डीकोड करें।
- क्यों setrawcookie की तरह एक और समारोह की जरूरत है() पहले से ही है जब वहाँ एक समारोह setcookie() कुकी मानों की स्थापना के लिए उपलब्ध है?
मुख्य रूप से 2 के लिए कारणों:
मूल्य आप भेज रहे हैं पहले से ही इनकोडिंग जा सकता है।
आप डबल एन्कोडिंग से बचना चाहते हैं, क्योंकि सबसे अच्छा मतलब है कि आपको और अधिक काम करने की आवश्यकता है। सबसे बुरे मामले में, यह डेटा को पूरी तरह से दूषित कर सकता है (यानी आप 100% निश्चित नहीं हो सकते कि मूल डेटा क्या था)।
मूल्यों को एन्कोड करने के कई तरीके हैं, और एक setcookie()
उपयोग वांछनीय नहीं हो सकता है।
यूआरएल-एन्कोडिंग अक्सर कुकी प्रारूप की तुलना में अधिक डेटा एन्कोड करता है।
चरम मामलों में (आपको इससे कभी भी चिंतित नहीं होना चाहिए), चूंकि एन्कोडेड डेटा आमतौर पर मूल आकार में बड़ा होता है, इसलिए यह अधिकतम कुकी आकार (लगभग 4 केबी) से अधिक हो सकता है। या आप बस बैंडविड्थ को सहेजना चाहते हैं।
लेकिन भी असामान्य है कि आप 100% है कि डेटा, एन्कोडिंग की जरूरत नहीं है तो आप बस उस अनावश्यक कदम को छोड़ करना चाहते हैं पता नहीं है।
- डिकोडिंग असुरक्षित/हानिकारक/खतरनाक/धीमी गति से/कुछ और URL एन्कोडिंग और यूआरएल की प्रक्रिया इतनी है कि यह बचा जाना चाहिए है?
सामान्य रूप से नहीं, लेकिन इसका पहले से ही उत्तर दिया जाना चाहिए।
- क्या
setrawcookie()
setcookie()
से अधिक उपयोग कर के लाभ/कमियां हैं?
दोष यह है कि यदि आवश्यक हो तो आपको मूल्यों को एन्कोड करने की आवश्यकता है।
लाभ, पहले से ही ऊपर बताए गए हैं।
- कौन सा सुरक्षित/बेहतर/आदि सुरक्षित/विश्वसनीय/है।
setcookie()
या setrawcookie()
?
setcookie()
cookie protocol के साथ अपरिचित लोगों से त्रुटियों के लिए कम कमरे छोड़ देता है।
लेकिन यह एक लागत पर आता है - यह धारणा है कि आप हमेशा यूआरएल-एन्कोडिंग चाहते हैं। और आमतौर पर धारणा प्रोग्रामिंग में एक बुरी चीज है।
एक नौसिखिया के लिए, setcookie()
उपयोग करना आसान है।
एक विशेषज्ञ के लिए, setrawcookie()
कम प्रतिबंध डालता है और इस प्रकार अधिक लचीला होता है।
न तो स्वाभाविक रूप से बेहतर है, और चूंकि आपने "सुरक्षित" का उल्लेख किया है - न ही सुरक्षा पर इसका कोई प्रभाव पड़ता है।
- कुकीज़
$_COOKIE['cookie_variable'] = 'some_value'
बजाय setcookie()
या setrawcookie()
का उपयोग कर जैसे अन्य चर की तरह सेट किया जा नहीं कर सकते?
सं
मेरी राय में एक लंबा आदेश है कि। संदेह है कि कोई भी उन सभी का जवाब देगा। – Andreas
'urlencode' देखें: http://php.net/manual/en/function.urlencode.php – HostFission