با عرض سلام خدمت کاربران محترم سایت پی وی لرن. در جلسه قبل این آموزش رویداد های زمانی در جاوا اسکریپت را توضیح دادیم در این جلسه قصد داریم به آموزش کار با کوکی ها در جاوا اسکریپت JavaScript و ساخت کوکی در جاوا اسکریپت بپردازیم.
کوکی ها (Cookies) این امکان را به ما می دهند تا اطلاعات کاربران را در صفحه وب ذخیره کنیم.
کوکی ها داده هایی هستند که در فایل های متنی کوچک بر روی کامپیوتر ذخیره می شود.
هنگامی که وب سرور یک صفحه وب را به یک مرورگر ارسال می کند، ارتباط قطع می شود و سرور هرچیزی درمورد کاربر را فراموش می کند.
کوکی ها برای حل این مشکل اختراع شده اند.
کوکی ها در جفت نام-مقدار به صورت زیر ذخیره می شوند:
1 | username = John Doe |
وقتی که یک یک مرورگر یک صفحه وب را از سرور درخواست می کند، کوکی های متعلق به صفحه نیز به درخواست اضافه می شوند.
از این راه سرور داده های لازم برای “یادآوری” اطلاعات کاربران را بدست می آورد.
نکته: اگر مرورگرتان پشتیبانی از کوکی های محلی local را قطع کره باشد، هیچ کدام از مثال هایی که در ادامه خواند آمد اجرا نخواهد شد.
جاوا اسکریپت می تواند با خاصیت (Property) document.cookie کوکی ها را ایجاد، بخواند و حذف کند.
یک کوکی در جاوا اسکریپت به صورت زیر ساخته می شود:
1 | document.cookie = "username=John Doe"; |
به صورت پیش فرض، هنگام بسته شدن مرورگر کوکی ها نیز حذف می شوند.
با یک پارامتر path می توانید به مرورگر بگویید که کوکی به چه مسیری تعلق دارد.
به صورت پیش فرض کوکی به صفحه جاری تعلق دارد.
1 | document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; |
یک کوکی در جاوا اسکریپت به صورت زیر خوانده می شود:
1 | var x = document.cookie; |
document.cookie تمام کوکی ها را در یک رشته به صورت زیر بر می گرداند:
cookie1=value; cookie2=value; cookie3=value;
کوکی ها را می توان همانطور که ایجاد کرد، تغییر نیز داد:
1 | document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; |
کوکی ها بازنویسی خواهند شد.
حذف کوکی ها در جاوا اسکریپت ساده است.
نباید در هنگام حذف کوکیف هیچ مقداری را مشخص کرد.
فقط پارامتر expires را به تاریخ گذشته تنظیم کنید.
1 | document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; |
خاصیت document.cookie شبیه به یک متن رشته معمولی می باشد. اما این طور نیست.
اگر شما یک کوکی جدیدی را ایجاد کنید، کوکی های قدیمی بازنویسی نخواهند شد.
کوکی جدید به document.cookie اضافه می شوند.
اگر بخواهید مقدار کوکی خاصی را پیدا کنید، باید تابعی بنویسید که مقدار کوکی را در رشته جستجو کند.
در ادامه برنامه ای خواهیم نوشت که کوکی بازدید کننده ها را ذخیره می کند.
ابتدا کاربر وارد صفحه وب می شود و از او خواسته می شود تا نامش را وارد کند.
نام کاربر در کوکی ذخیره می شود.
دفعه بعد که کاربر وارد صفحه می شود، یک پیام خوش آمد گویی دریافت می کند.
برای این برنامه ۳ تابع نیاز داریم:
ابتدا تابعی می نویسیم که نام بازدید کننده را در یک متغیر کوکی ذخیره می کند:
1 2 3 4 5 6 | function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } |
پارامتر های تابع بالا نام کوکی (cname)، مقدار کوکی (value) و تعداد روز هایی که کوکی باید بماند(exdays)
تابعی می نویسیم که مقدار یک کوکی مشخص شده را بر گرداند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } |
و در آخر تابعی ایجاد خواهیم کرد که بررسی می کند آیا کوکی تنظیم شده است یا خیر.
اگر کوکی ست شده باشد تابع یک تبریک نشان می دهد.
اگر کوکی ست نشده باشد تابع یک Promp box برای درخواست نام کاربر نمایش می دهد و کوکی username را به مدت ۳۶۵ روز توسز تایع ()setCookie ذخیره می کند:
1 2 3 4 5 6 7 8 9 10 11 | function checkCookie() { var username = getCookie("username"); if (username != "") { alert("Welcome again " + username); } else { username = prompt("Please enter your name:", ""); if (username != "" && username != null) { setCookie("username", username, 365); } } } |
تمام کد به صورت یکجا:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <br><!DOCTYPE html> <html> <head> <script> function setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires=" + d.toGMTString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i < ca.length; i++) { var 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() { var user=getCookie("username"); if (user != "") { alert("Welcome again " + user); } else { user = prompt("Please enter your name:",""); if (user != "" && user != null) { setCookie("username", user, 30); } } } </script> </head> <body onload="checkCookie()"> </body> </html> |
هنگامی که صفحه بارگذاری شود، تابع ()checkCookie اجرا خواهد شد.
جلسه کار با کوکی ها در جاوا اسکریپت JavaScript نیز به پایان رسید.
در جلسات آتی به آموزش Ajax در JavaScript خواهیم پرداخت. با ما همراه باشید
HamiD
عالیه 🙂
میثم امامی
سلام
برای سرور چند دستگاه صنعتی web gui نوشتم
اگه همزمان دو تا صفحه باز کنم که هر صفحه مختص یک دستگاه باشه با تغییر دادن اطلاعات در صفحه اول صفحه دوم هم تبدیل به صفحه اول میشه ؟!
با کوکی چه کنم ؟؟؟
صادق
سلام.
منظورتون چه نوع اطلاعاتی هست؟
با کوکی ها دقیقا چه کار میخواین بکنین؟
میثم امامی
کلا یک صفحه نوشته شده که با انتخاب دستگاه مورد نظر این صفحه به ای پی اون دستگاه متصل میشه و دیتای اون دستگاه و ریسپانس میکنه و مقادیر مثلا لول صدای اون دستگاه و نمایش میده ما میتونیم لول صدا رو تغییر بدیم .
تو حالت نرمال وقتی یک صفحه باز باشه مشکلی وجود نداره اما وقتی همزمان صفحات دو دستگاه رو باز میکنیم با مثلا تغییر لول صدای این صفحه ناگهان ای پی صفحه دوم هم به ای پی صفحه اول تغییر کرده و هر دو صفحه یک دستگاه رو نمایش میدن .
صادق
با عرض پوزش در این مورد اطلاعی ندارم.
احمد آقاجانپور
سلام وقت بخیر سوالی داشتم این setTime در این قسمت d.setTime(d.getTime() + (exdays*24*60*60*1000)) نوشتین این چیزیه یعنی کلمه کلیدایه یه نه یک اسمی یا چیزی که خودتون اضافه کردین یا در جاوا اسکریپت هست مثلاً document.cookie توی جاوا اسکریپت هست خواستم بدونم اونم خودش وجود داره یا نه صرفاً یک اسمی که خودتون قرار دادین اگه هست منظورش چیه