यदि आप कॉल करने के तुरंत बाद कुकी के मूल्य तक पहुँच प्राप्त करना चाहते हैं तो आप setcookie()
उपयोग नहीं कर सकते $_COOKIE
। इसका कारण प्रोटोकॉल की प्रकृति में है (देखें https://tools.ietf.org/html/rfc6265 )। जब आप इसका उपयोग करते हैं setcookie()
तो एक कुकी को HTTP हेडर के बाकी क्लाइंट को भेजने के लिए भेजा जाता है ( http://php.net/manual/en/function.setcookie.php देखें )। लेकिन $_COOKIE
दूसरी तरफ क्लाइंट ( HTTP://php.net/manual/en/reserved.variables.cookies.php ) से HTTP कुकीज़ के माध्यम से वर्तमान स्क्रिप्ट को पारित चर शामिल हैं ।
जब आप $_COOKIE
कॉल करने के बाद बदलते हैं setcookie()
- जैसे कुछ उत्तर यहाँ सुझाए गए हैं - इसमें क्लाइंट से केवल कुकीज़ शामिल नहीं है। यह आपके आवेदन में प्रयुक्त तृतीय पक्ष कोड में की गई मान्यताओं के साथ हस्तक्षेप कर सकता है और इसके परिणामस्वरूप अवांछित साइट प्रभाव हो सकता है। तो सामान्य तौर पर यह अच्छा अभ्यास नहीं है और यह केवल एक विकल्प है जब कॉल setcookie()
आपके स्वयं के कोड का हिस्सा होते हैं।
एक setcookie()
ही अनुरोध के साथ एक मूल्य निर्धारित करने के लिए एक साफ और पारदर्शी तरीका उपयोग करना है headers_list()
(देखें http://php.net/manual/en/function.headers-list.php ) :
function getcookie($name) {
$cookies = [];
$headers = headers_list();
foreach($headers as $header) {
if (strpos($header, 'Set-Cookie: ') === 0) {
$value = str_replace('&', urlencode('&'), substr($header, 12));
parse_str(current(explode(';', $value, 1)), $pair);
$cookies = array_merge_recursive($cookies, $pair);
}
}
return $cookies[$name];
}
setcookie('uname', $uname, time() + 60 * 30);
echo "Cookie value: " . getcookie('uname');
लेकिन ध्यान दें कि यह PHP CLI (जैसे PHPUnit) में काम नहीं करेगा। ऐसे मामले में आप XDebug जैसे तृतीय पक्ष एक्सटेंशन ( http://xdebug.org/docs/all_functions#xdebug_get_headers ) का उपयोग कर सकते हैं ।