Set Cookie in PHP

Set Cookie in PHP – Cookie वास्तव में एक String होता है, जिसमें कई Fields होते हैं। कोई Web Server एक या एक से ज्यादा Cookies को किसी Web Browser के Header Response में Send कर सकता है। Cookie के कुछ Fields उन Pages को Indicate करते हैं, जिनके लिए Web Browser को HTTP Request Message में Cookie की Information को Web Server पर Send करना होता है, ताकि Web Server किसी Specific Page को Uniquely Identify कर सके।

Cookie का value Field वह हिस्सा होता है, जहां Web Server किसी Data को Specify करता है। उदाहरण के लिए User ID या किसी Specific Type के Identification Code को Web Server, Cookie के value Field में ही Specify करता है। किसी Cookie को Create करके Web Browser पर Send करने के लिए PHP हमें setcookie() नाम का Function Provide करता है।

ये Function एक Cookie Define करता है जिसे HTTP Response Header के साथ Web Browser में Send किया जाता है। अन्य Headers की तरह ही Cookie को भी सबसे पहले Send करना होता है अन्यथा “Header already sent” की Error आती है।

एक बार जब Cookie Set हो जाता है, फिर उस Cookie को किसी भी अन्य Page में $_COOKIE Super Global Array द्वारा Access किया जा सकता है। इस Super Global Array के अलावा Cookie $_REQUEST Super Global Array द्वारा भी Accessible रहता है।

Cookie Set करने के लिए हमें setcookie() Function को Use करते हैं, जिसका Syntax निम्नानुसार होता हैः

bool setcookie(string $name, string $value, int $expire = 0, string $path, string $domain, bool $secure = false, bool $httponly = false)

इस Function में कई Parameters Specify किए जा सकते हैं, लेकिन मूल रूप से इस Function का केवल पहला Parameter यानी name Parameter ही Compulsory Parameter है, द्रोष सभी Parameters Optional हैं। साथ ही हम किसी भी String Parameter को Empty String तथा Integer Parameter $expire को 0 Specify करके Replace कर सकते हैं। इस Function के विभिन्न Parameters निम्नानुसार होते हैं:

$name Parameter

इस Parameter के रूप में हमें हमारी हर Cookie का एक Unique नाम देना होता है। हम अलग-अलग नामों के एक से ज्यादा Cookies को Specify कर सकते हैं। Cookie के नाम के लिए भी हमें Identifiers के नामों के Rules को Follow करना होता है। यानी हम Cookie के नाम में Whitespace या Semicolon जैसे Special Symbols का प्रयोग नहीं कर सकते।

$value Parameter

इस Parameter में हम किसी Arbitrary String को Specify करते हैं। इस String के रूप में हम सामान्यतः User ID जैसे किसी मान से Specify करते हैं, जिससे किसी User का Uniquely Identify करने की सुविधा प्राप्त होती है।

Cooke की Value को Retrieve करने के लिए हमें $_COOKIE[‘cookiename’] Expression को Use करना होता है। हमें कभी भी Cookie के नाम के रूप में किसी Sensitive Information को Store नहीं करना चाहिए, क्योंकि Cookie को Scan किया जा सकता है, इसलिए कोई भी Web Server थोडा सा Trick Use करके आपके Computer की सभी Cookies को Scan कर सकता है।

$expire Parameter

इस Parameter में हम Cookie की Expire Date Specify कर सकते हैं। हम यहां जो Date Specify करते हैं, Cookie उसी Date तक Available रहता है। Specific Date के बाद Cookie Expire हो जाता है।

यदि हम कोई Date Specify नहीं करते हैं, तो Web Browser Cookie को User के Computer की Hard Disk पर नहीं बल्कि केवल Memory में ही Save करता है। परिणामस्वरूप Browser से Exit करते ही ये Cookie Expire हो जाते हैं।

Expiration Date को January, 1 1070 GMT Mid-Night को आधार मानते हुए Number of Seconds के रूप में Specify करते हैं। उदाहरण के लिए time()+60*60*2 Value Set करने पर Cookie Set होने के दो घण्टे बाद Expire हो जाता है।

$path Parameter

जब हम इस Parameter में कोई Path Specify करते हैं, तो Web Browser केवल उसी URL के लिए Cookie Return करता है, जिसे इस Parameter में Specify किया गया होता है। द्रोष अन्य URLs के लिए Web Browser Cookie की Information को HTTP Request Message के Header में Pass नहीं करता। परिणामस्वरूप Web Server केवल उसी Page पर Cooke को प्राप्त करता है, जिसे इस Path में Set किया गया है।

उदाहरण के लिए यदि हम इस Parameter में “/” यानी Root Specify करें, तो Cookie पूरे Domain के सभी Directories व Pages के लिए Available रहेगा।

जबकि यदि हम यहां पर “/articles/” Specify करें, तो Cookie केवल “/articles/” Directory की सभी Sub-Directories व सभी Pages के लिए Available रहेगा।

इस Parameter में Default रूप से Current Directory का Path Set रहता है।

$domain Parameter

इस Parameter में हम जिस Domain को Set करते हैं, Web Browser केवल उसी Domain व उसके सभी Sub-Domains के लिए Cookie को Return करेगा। Default रूप से इस Parameter में हमारे Web Server का Hostname होता है।

Cookie Lower Level Domains के लिए भी Available रहता है। उदाहरण के लिए यदि हम यहां पर “www.bccfalna.com” Specify करें, तो Cooke “bccfalna.com” के लिए भी Available रहेगा। साथ ही “blog.bccfalna.com” के लिए भी Available रहेगा।

$secure Parameter

इस Parameter को True Set करने पर Cookie केवल उन्हीं Web Pages के लिए Return होता है, जो कि Secure HTTP Connection यानी https Connection पर होते हैं। इसका Default मान False होता है, जिसका मतलब ये होता है कि Cookie Insecure Connections पर भी Send होगा।

$httponly Parameter

इस Parameter में True Set करने पर Cookie केवल HTTP Protocol के लिए ही Available रहेगा। यानी इस प्रकार की Cookie को JavaScript जैसी Scripting Language द्वारा Access नहीं किया जा सकता।

हालांकि इस Parameter को सभी Web Servers Support नहीं करते, लेकिन इस Parameter में True Set करके हम Cross Site Scripting Attach यानी XSS Attacks को कुछ हद तक कम कर सकते हैं।

यदि इस Function को Call करने से पहले किसी भी तरह का Output Generate हो जाता है, तो setcookie() Function Fail हो जाता है और False Return करता है। जबकि Successfully Run होने की स्थिति में ये Function True Return करता है।

हालांकि ये Function इस बात को Indicate नहीं करता कि User के Web Browser ने Cookie को Actually उसके Computer System पर Save किया या Web Browser में Cookies Disabled होने की वजह से Save नहीं हुआ।

चलिए, कुछ उदाहरणों द्वारा हम Cookies को Practically SetRetrieve करने के बारे में समझते हैं।

<?php 
$value = 'This cookie is being set for 1 minute';

setcookie("TestCookie1", $value);
setcookie("TestCookie2", $value, time()+60);  /* expire in 1 minute */
setcookie("TestCookie3", $value, time()+60, "", "http://localhost", 1);
$title = "Cookie Setting";
include_once('header.php');
?>
<h1>Cookie Setting</h1>

<?php include_once('footer.php'); ?>

उपरोक्त Code तीन Cookie Set कर रहा है और तीनों ही Cookie का नाम TestCookie1, TestCookie2TestCookie3 है।

पहला Cookie हमेंशा के लिए Set हो रहा है। ये Cookie तभी Delete होगा, जब User स्वयं अपने Web Browser से Manually Cookies को Clear करे।

दूसरा Cookie केवल एक Minute के लिए Set होगा। जबकि तीसरा Cooke भी केवल एक Minute के लिए Set होगा, लेकिन http://localhost Domain के सभी Pages के लिए Return होगा।

ध्यान रखने वाले एक बात ये भी है कि Cookie के Value Part में Specify किया जाने वाला String Automatically urlencoded हो जाता है। परिणामस्वरूप String में Specified Space व अन्य Special Characters Encode होकर अन्य URL Specific Characters में Convert हो जाते हैं।

इसलिए यदि हम चाहते हैं कि हमारे Cookie की Value Automatically urlencoded न हो जाए, तो हम setcookie() Function के स्थान पर setrawcookie() Function को Use कर सकते हैं।

setcookie()setrawcookie() दोनों Functions में केवल यही एक अन्तर है कि setrawcookie() Function अपने Value Parameter को urlencoded Form में Convert नहीं करता जबकि setcookie() करता है। बाकी अन्य सभी Parameters व Working में दोनों Functions एक समान हैं।

हमने हमारी पिछली Script में जिन Cookies को Set किया है, उन Cookies को फिर से Retrieve करने के लिए हम निम्नानुसार $_COOKIE Super Global Array का प्रयोग कर सकते हैं:

<?php 
$title = "Cookie Retrieving";
include_once('header.php');

echo "All Set Cookies are as follows: ";
print_r($_COOKIE);
?>
<?php include_once('footer.php'); ?>

हम किसी Cookie को Create करते ही उसे Expire कर सकते हैं। किसी Cookie को Create करते ही उसे Expire करने के लिए हमें केवल किसी Past Date को $expire Parameter के रूप में Specify करना होता है। यदि हम उपरोक्त उदाहरण को ही Expire Cooke के रूप में Modify करना चाहें, तो हमारा Modified Program निम्नानुसार हो सकता हैः

<?php 
$value = 'This cookie is being set for 1 minute';

setcookie("TestCookie1", $value);
setcookie("TestCookie2", $value, time()-60);  /* expired due to Past Date */
setcookie("TestCookie3", $value, time()-60, "", "http://localhost", 1);
$title = "Cookie Setting";
include_once('header.php');
?>
<h1>Cookie Setting</h1>

<?php include_once('footer.php'); ?>

उपरोक्त उदाहरण में हमने TestCooie2TestCookie3 को 1 Minute Past में Set किया है। परिणामस्वरूप Cookie Set होते ही Expire हो जाता है।

हम किसी Array के रूप में भी किसी Cookie को Set कर सकते हैं। जब हम Array के रूप में किसी Cookie को Set करते हैं, तो सभी Cookies का नाम समान होता है। इस Cookie को Retrieve करते समय हमें फिर से Cookies का एक Array प्राप्त होता है। Array के रूप में Cookie Set करने के लिए हम निम्न Code Use कर सकते हैं:

<?php 
// set the cookies
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");

$title = "Cookie Setting";
include_once('header.php');
?>
<h1>Cookie Setting</h1>

<?php include_once('footer.php'); ?>

जबकि इस Array के रूप में Set की गई Cookie को फिर से Retrieve करने के लिए हम निम्न Code Use कर सकते हैं:

<?php 
$title = "Cookie Retrieving";
include_once('header.php');

// after the page reloads, print them out
if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        $name = htmlspecialchars($name);
        $value = htmlspecialchars($value);
        echo "$name : $value <br />\n";
    }
}
?>
<?php include_once('footer.php'); ?>

इस Program में हमने htmlspecialchars() नाम के एक नए Function को Use किया है। इस Function व इस जैसे ही कई और Functions के बारे में हम आगे Detail से जानेंगे, क्योंकि ये Functions मूल रूप से HTML Pages की Strings व Contents को Access व Manipulate करने के लिए बहुत Use किए जाते हैं।

हम जिस Page में किसी Cookie को Set करते हैं, Exactly उसी समय उसी Page में वह Cookie Access करने के लिए Available नहीं होती है। बल्कि उस Cookie को Access करने के लिए हमें या तो नए Page पर Move होना होता है या फिर उसी Page को Reload करना होता है।

यदि एक ही नाम के एक से ज्यादा Cookies को Set किया जाए, तो अन्तिम Cookie ही Available रहती है।

किसी Cookie के Value Parameter में False Specify करके हम उस Cookie को Delete कर सकते हैं। लेकिन False को Specify करने के लिए हमें Boolean True या False Values को Specify नहीं करना चाहिए बल्कि Integer Value 0 या 1 को String के रूप में Specify करना चाहिए।

चलिए, Cookies का प्रयोग करते हुए हम एक Login System Create करते हैं। इस Login System में तीन Web Pages हैं। पहला Web Page, Registration Page है, जो User से उसका UsernamePassword Accept करता है। दूसरा Page Registered होने के बाद का Login Page है जबकि तीसरा Page Login Information Page है। तीनों ही Pages के Codes निम्नानुसार हैं:

<!-- register.php -->
<?php 
$title = "Cookie Getting";
include_once('header.php');
?>
<h1>Register</h1>
<form action="login.php" method="get">
	<input name="username" type="text">
    <input name="password" type="password">
    <input name="register" type="submit" value="register">
</form>
<?php include_once('footer.php'); ?>

<!-- login.php -->
<?php 
setcookie('username', $_REQUEST['username']);
setcookie('password', $_REQUEST['password']);

$title = "Cookie Setting";
include_once('header.php');
?>
<h1>Registered Successfully</h1>
<h2>You can Login now</h2>
<form action="loginInformation.php" method="get">
	<input name="username" type="text">
    <input name="password" type="password">
    <input name="register" type="submit" value="Login">
</form>
<?php include_once('footer.php'); ?>

<!-- loginInformation.php -->
<?php 
$title = "Cookie Retrieving";
include_once('header.php');

if(isset($_COOKIE['username']) && isset($_COOKIE['password'])){
	if($_COOKIE['username'] === $_REQUEST['username'] && 
	   $_COOKIE['password'] === $_REQUEST['password'])
		echo "<h1>Login Successfully</h1>";
	else
		echo "<h1>Invalid username or password</h1>";
}

include_once('footer.php'); 
?>

जब हम सबसे पहले यानी register.php Page को Load करते हैं, तो ये Page हमसे Registration Information के रूप में निम्नानुसार UsernamePassword मांगता हैः

Set Cookie in PHP - Registrer - Hindi

Username व Password Fill करके जैसे ही हम “register” Button पर Click करते हैं, हम दूसरे Page पर पहुंचते हैं। ये दूसरा Page Load होने से पहले हमारे Computer की Cookies को Set कर देता है और जिन Username व Password Information को हमने हमारे पिछले Page पर Specify किया था, उन्हें Cookie के रूप में Set कर देता है।

Set Cookie in PHP - Registrered - Hindi

इस Login Form पर Successful Registration का Message आता है और Login करने के लिए Fields दिखाई देते हैं, जहां UsernamePassword Specify करके “Login” Button पर Click करते ही हमारे सामने तीसरा Page आता है, जो निम्नानुसार Successful Login या Invalid Login Information का Message देता हैः

Set Cookie in PHP - Login - Hindi

इस पूरे Example के तीनों Pages की Coding बिल्कुल ही सरल है। पहले Page पर हमने Simple Form Create किया है। दूसरे Page पर हमने पहले Form से आने वाली Information को Cookie के रूप में Set किया है और Login करने के लिए फिर से Simple Login Form को Create किया है। और तीसरे Form में हमने दूसरे Form से आने वाले Data को Cookie के रूप में Stored Data से Compare करके उपयुक्त Result Display किया है।

हालांकि Cookie Based ये Login System सामान्य रूप से काम करता है, लेकिन Practical व Professional Login System के लिए ये Login System कोई महत्व नहीं रखता। हालांकि Actual Professional Level के Login System के काम करने का तरीका भी Exactly यही होता है। लेकिन हम इस Login System को Professional Level के Project में उपयोग में नहीं ले सकते।

क्योंकि इस Login System में जैसे ही User अपने Computer के Cookie को Clear करेगा, उसे फिर से Registration करना पडेगा क्योंकि Registration की सारी Information यानी UsernamePasswords Web Server पर नहीं बल्कि Client यानी User के Computer पर Stored है।

इसके अलावा भी Cookies की अपनी कुछ और Limitations हैं। उदाहरण के लिए हम किसी भी Cookie की Size को 4 KB से ज्यादा नहीं रख सकते। इसी तरह से हम केवल 20 Cookies को ही हर Domain के लिए Set कर सकते हैं जबकि Client के Web Browser में अधिकतम 300 Cookies ही Set हो सकते हैं। User अपनी इच्छानुसार अपने Web Browser के Cookie Option को Disabled रख सकता है या कभी भी अपने Web Browser की Cookies को Clear कर सकता है।

यानी ऐसी बहुत सारी परेशानियां हैं, जिनके कारण हम Client के Computer के Cookies Option पर ज्यादा भरोसा नहीं कर सकते और न ही Cookies पर हमारा कोई ज्यादा Control होता है कि Client का Web Browser कब किसी Cookie को Expire कर देगा।

इसी तरह से हो सकता है कि Client के Web Browser में Cookies को Store करने की Limit पूरी हो गई हो। परिणामस्वरूप वह हमारे Web Application की Cookie को Save करने से रोक दे।

Cookie का Expiration भी पूरी तरह से Client के Computer की Clock पर निर्भर होता है। यदि Client के Compuer की Clock ठीक से Set न हो, तो जब Cookie को Expire होना चाहिए, तब वह Cookie Expire नहीं होगी या हो सकता है कि Cooke Set होने से पहले ही Expire हो जाए।

इन विभिन्न प्रकार की Limitations के कारण Tracking व State Monitories Cookies पर पूरी तरह से निर्भर होना ठीक नहीं कहा जा सकता। इसलिए विभिन्न Web Related Programming Languages की तरह ही PHP में भी हमें एक और बेहतर सुविधा हमें प्राप्त होती है और वह बेहतर सुविधा Sessions की है।

PHP in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

PHP in Hindi | Page: 647 | Format: PDF

BUY NOW GET DEMO REVIEWS