جاوا اسکریپت – کوکیها
کوکی چیست؟
مرورگرهای وب و سرورها از پروتکل HTTP برای ارتباط استفاده میکنند و HTTP یک پروتکل بدون وضعیت است. اما برای یک وبسایت تجاری، لازم است که اطلاعات جلسه را بین صفحات مختلف نگه دارد. به عنوان مثال، یک ثبت نام کاربر پس از تکمیل بسیاری از صفحات پایان مییابد. اما چگونه اطلاعات جلسه کاربران را در تمام صفحات وب نگه داریم؟
در بسیاری از موارد، استفاده از کوکیها روشی کارآمد برای یادآوری و پیگیری ترجیحات، خریدها، کمیسیونها و سایر اطلاعات مورد نیاز برای تجربه بازدیدکنندگان بهتر یا آمار سایت است.
چگونگی عملکرد
سرور شما برخی اطلاعات را به مرورگر بازدیدکننده به شکل یک کوکی ارسال میکند. مرورگر ممکن است کوکی را پذیرفته باشد. اگر این کار را کند، به عنوان یک رکورد متن ساده در حافظهی دائمی بازدیدکننده ذخیره میشود. اکنون، هنگامی که بازدیدکننده به صفحه دیگری در سایت شما میرسد، مرورگر همان کوکی را به سرور برای بازیابی ارسال میکند. یک بار بازیابی شده، سرور شما میداند/یاد میآورد چه چیزی قبلاً ذخیره شده بود.
کوکیها یک رکورد دادهی متن ساده از 5 فیلد متغیر زیر است:
- انقضاء (Expires) – تاریخی که کوکی منقضی میشود. اگر این فیلد خالی باشد، کوکی زمانی منقضی میشود که بازدیدکننده مرورگر را ببندد.
- دامنه (Domain) – نام دامنه وبسایت شما.
- مسیر (Path) – مسیر به دایرکتوری یا صفحهای که کوکی را تنظیم کردهاست. این میتواند خالی باشد اگر میخواهید کوکی را از هر دایرکتوری یا صفحهای بازیابی کنید.
- امن (Secure) – اگر این فیلد حاوی کلمه “secure” باشد، کوکی فقط میتواند با یک سرور امن بازیابی شود. اگر این فیلد خالی باشد، هیچ محدودیتی وجود ندارد.
- نام=مقدار (Name=Value) – کوکیها به صورت جفتهای کلید-مقدار تنظیم و بازیابی میشوند. کوکیها ابتدا برای برنامهنویسی CGI طراحی شدهاند. دادههای موجود در یک کوکی به صورت خودکار بین مرورگر و سرور وب انتقال مییابد، بنابراین اسکریپتهای CGI در سرور میتوانند مقادیر کوکی را که در کلاینت ذخیره شدهاند، بخوانند و بنویسند.
همچنین، جاوااسکریپت قادر به مدیریت کوکیها با استفاده از خصوصیت cookie شیء Document است. جاوااسکریپت قادر به خواندن، ایجاد، اصلاح و حذف کوکیهایی است که برای صفحه وب فعلی اعمال میشود
ذخیره کردن کوکیها (Storing Cookies)
document.cookie = "key1=value1; key2=value2; expires=date";
در اینجا ویژگی expires اختیاری است. اگر این ویژگی را با یک تاریخ یا زمان معتبر ارائه دهید، کوکی در تاریخ یا زمان مشخص شده منقضی میشود و پس از آن، مقدار کوکی قابل دسترسی نخواهد بود.
توجه: مقادیر کوکی نباید شامل نقطهویرگول، ویرگول یا فاصله خالی باشد. به همین دلیل، ممکن است بخواهید از تابع escape() جاوااسکریپت استفاده کنید تا مقدار را قبل از ذخیره کردن در کوکی کدگذاری کنید. اگر این کار را انجام دهید، همچنین باید از تابع معادل unescape() استفاده کنید هنگام خواندن مقدار کوکی.
مثال
<html>
<head>
<script type = "text/javascript">
<!--
function WriteCookie() {
if( document.myform.customer.value == "" ) {
alert("مقداری وارد کنید!");
return;
}
cookievalue = escape(document.myform.customer.value) + ";";
document.cookie = "name=" + cookievalue;
document.write ("تنظیم کوکیها: " + "name=" + cookievalue );
}
//-->
</script>
</head>
<body>
<form name = "myform" action = "">
نام را وارد کنید: <input type = "text" name = "customer"/>
<input type = "button" value = "تنظیم کوکی" onclick = "WriteCookie();"/>
</form>
</body>
</html>
خواندن کوکیها (Reading Cookies)
خواندن یک کوکی همانند تنظیم آن است، زیرا مقدار شیء document.cookie همان کوکی است. بنابراین میتوانید از این رشته هر زمانی که میخواهید برای دسترسی به کوکی استفاده کنید. رشته document.cookie یک لیست از جفتهای نام = مقدار را با استفاده از نقطه و کاما جدا میکند، جایی که نام نام یک کوکی و مقدار مقدار رشتهای آن است.
میتوانید از تابع split() رشتهها برای شکستن یک رشته به کلید و مقادیر به شکل زیر استفاده کنید:
مثال
<html>
<head>
<script type = "text/javascript">
<!--
function ReadCookie() {
var allcookies = document.cookie;
document.write ("All Cookies : " + allcookies );
// Get all the cookies pairs in an array
cookiearray = allcookies.split(';');
// Now take key value pair out of this array
for(var i=0; i<cookiearray.length; i++) {
name = cookiearray[i].split('=')[0];
value = cookiearray[i].split('=')[1];
document.write ("Key is : " + name + " and Value is : " + value);
}
}
//-->
</script>
</head>
<body>
<form name = "myform" action = "">
<p> click the following button and see the result:</p>
<input type = "button" value = "Get Cookie" onclick = "ReadCookie()"/>
</form>
</body>
</html>
توجه − در اینجا length یک تابع کلاس آرایه است که طول یک آرایه را برمیگرداند. ما در یک فصل جداگانه به آرایهها خواهیم پرداخت. در همین مدت، لطفاً سعی کنید آن را درک کنید.
تنظیم تاریخ انقضای یک کوکی (Setting Cookies Expiry Date)
میتوانید عمر یک کوکی را فراتر از جلسه فعلی مرورگر با تنظیم تاریخ انقضا و ذخیره تاریخ انقضا درون کوکی گسترش دهید. این کار با تنظیم ویژگی ‘expires’ به یک تاریخ و زمان انجام میشود.
مثال
<html>
<head>
<script type = "text/javascript">
<!--
function WriteCookie() {
var now = new Date();
now.setMonth( now.getMonth() + 1 );
cookievalue = escape(document.myform.customer.value) + ";"
document.cookie = "name=" + cookievalue;
document.cookie = "expires=" + now.toUTCString() + ";"
document.write ("Setting Cookies : " + "name=" + cookievalue );
}
//-->
</script>
</head>
<body>
<form name = "myform" action = "">
Enter name: <input type = "text" name = "customer"/>
<input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
</form>
</body>
</html>
حذف یک کوکی (Deleting a Cookie)
گاهی اوقات شما میخواهید یک کوکی را حذف کنید تا تلاشهای بعدی برای خواندن کوکی هیچ چیزی بازنگرداننده نداشته باشد. برای انجام این کار، شما فقط نیاز به تنظیم تاریخ انقضای آن به یک زمان در گذشته دارید.
مثال
<html>
<head>
<script type = "text/javascript">
<!--
function WriteCookie() {
var now = new Date();
now.setMonth( now.getMonth() - 1 );
cookievalue = escape(document.myform.customer.value) + ";"
document.cookie = "name=" + cookievalue;
document.cookie = "expires=" + now.toUTCString() + ";"
document.write("Setting Cookies : " + "name=" + cookievalue );
}
//-->
</script>
</head>
<body>
<form name = "myform" action = "">
Enter name: <input type = "text" name = "customer"/>
<input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/>
</form>
</body>
</html>
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام