كوكي ها اين امكان را ميدهد كه بتوان اطلاعات كاربر را در صفحات وب ذخيره كرد .اما بدليل رعايت حريم خصوصي افراد بايستي با اجازه كاربر باشد.
كوكي ها داده هائي هستند كه در فايل هاي متني در كامپيوتر كاربر ذخيره ميشوند.
هنگاميكه يك سروروب صفحه اي را براي مرورگر ارسال ميكند، اتصال قطع وسرور همه چيز را در مورد كاربر فراموش ميكند.
كوكي براي حل مشكل فوق ، يعني داشتن اطلاعاتي از كاربر بوجود آمدند:
كوكي ها بصورت زوجname-value ذخيره ميشوند . مثابه زير:
هنگاميكه يك مرورگر صفحه وبي را از سرور درخواست ميكند، كوكي هاي متعلق به صفحه به آن درخواست اضافه ميگردد .به اين ترتيب سرور داده هاي لازم را براي اطلاعات مربوط به كاربران دريافت ميكند.
اگر پشتيباني از كوكي هاي محلي در مرورگر شما خاموش باشد، هيچ يك از مثال هاي زير كار نميكند.
در جاوااسكريپت با ويژگيdocument.cookie ميتوان كوكي را ايجاد، حذف ويا آنرا بخوانيد.
در جاوااسكريپت يك كوكي ميتواند مشابه زير ايجاد شود.
document.cookie = "username=John Doe";
همچنين ميتوانيد تاريخ انقضا) در زمان(UTC اضافه كنيد .بطور پيش فرض وقتي مرورگر بسته ميشود، كوكي حذف ميگردد:
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC";
با يك پارامتر مسير، ميتوانيد براي مرورگر مشخص كنيد كه كوكي به كدام مسير تعلق دارد .بصورت پيش فرض متعلق به صفحه فعلي است:
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
با جاوااسكريپت ميتوان مشابه زير كوكي را خواند:
let x = document.cookie;
ويژگيdocument.cookie تمام كوكي هارا مشابه
با جاوااسكريپت مشابه با ايجاد كوكي ميتوان آن را تغييرداد .جديد جانشين قبلي ميشود:
document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";
حذف كوكي بسيار ساده است .وقتي نام كوكي بدون مقدار ذكر شود، آن حذف ميگردد .مشابه زير:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
توجه شود فقط تاريخ را مطابق تاريخ گذشته تنظيم كنيد.
براي اطمينان از حذف كوكي بايد مسير آنرا تعريف كنيد .اگر مسير مشخص نشود، برخي از مرورگرها اجازه حذف آنرا نمي دهند.
برگشتيdocument.cookie مشابهتي با رشته دارد، اما رشته نيست .حتي اگر يك رشته كامل درdoument.cookie بنويسيد، وقتي آنرا دو باره مي خوانيد، فقط ميتوانيد زوج name-valueآنرا به بينيد .
اگر كوكي جديدي تنظيم كنيد، كوكي هاي قديمي تر رونويسي نميشوند .كوكي جديد بهdocument.cookie اضافه ميشود .اگر آنرا دو باره بخوانيد چيزي مشابه زير خواهيد ديد:
اگر ميخواهيد مقدار يك كوكي مشخص را بيابيد، بايد يك تابع جاوااسكريپت براي پيدا كردن آن بنويسيد.
در مثالي كه در ادامه مي آيد، يك كوكي ايجاد ميشود كه نام بازديدكننده را ذخيره ميكند.
اولين باريكه بازديدكننده وارد صفحه وب ميشود، ازاو خواسته ميشود كه فيلد نام را پركند .سپس نام بازديد كننده در كوكي ذخيره ميشود. دفعه بعد كه بازديدكننده بهمان صفحه مراجعه ميكند، پيام خوش آمد دريافت ميكند.
براي مثال سه تابع جاوااسكريپت مطابق زير ايجاد ميشود:
ابتدا تابعي(function) ايجاد ميشود كه نام بازديدكننده را در متغير كوكي ذخيره كند.
مثال ـ تابع ذخيره كننده نام بازديد كننده
function setCookie(cname, cvalue, exdays) { const d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); let expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; }
پارامترهاي تابع بشرح زيرند:
اين تابع با كنارهم گذاشتن نام كوكي، مقداركوكي و منقضي آن رشته كوكي را تنظيم ميكند.
سپس بايد تابعي براي دسترسي يا دريافت كوكي ايجاد شود .مطابق مثال زير:
مثال ـ تابع دريافت يا دسترسي به كوكي
function getCookie(cname) { let name = cname + "="; let decodedCookie = decodeURIComponent(document.cookie); let ca = decodedCookie.split(';'); for(let i = 0; ilet c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; }
تشريح تابع:
در پايان تابعي براي كنترل تنظيم كوكي ايجاد ميگردد .اين تابع بررسي ميكند كه آيا كوكي فوق تنظيم شده ياخير .اگر تنظيم شده باشد پيغام تبريك داده ميشود.
اگر كوكي تنظيم نشده باشد، با فراخواني تابعsetCookie يك كادر اعلام نمايش ميدهد كه نام كاربر را ميخواهد . براي نام كاربري كوكي براي مدت365 ذخيره ميشود.
مثال ـ تابع كنترل كوكي
function checkCookie() { let username = getCookie("username"); if (username != "") { alert("Welcome again " + username); } else { username = prompt("Please enter your name:", ""); if (username != "" && username != null) { setCookie("username", username, 365); } } }
همه توابع فوق براي كوكي در مثال زير ميباشند:
مثال ـ مجموعه توابع كوكي
function setCookie(cname, cvalue, exdays) { const d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); let expires = "expires="+d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { let name = cname + "="; let ca = document.cookie.split(';'); for(let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function checkCookie() { let user = getCookie("username"); if (user != "") { alert("Welcome again " + user); } else { user = prompt("Please enter your name:", ""); if (user != "" && user != null) { setCookie("username", user, 365); } } }
در مثال فوق هنگاميكه صفحه بارگذاري ميشود تابعcheckCookie( ) اجرا ميشود.