جاوا اسکریپت – کوکی‌ها

کوکی چیست؟

مرورگرهای وب و سرورها از پروتکل HTTP برای ارتباط استفاده می‌کنند و HTTP یک پروتکل بدون وضعیت است. اما برای یک وب‌سایت تجاری، لازم است که اطلاعات جلسه را بین صفحات مختلف نگه دارد. به عنوان مثال، یک ثبت نام کاربر پس از تکمیل بسیاری از صفحات پایان می‌یابد. اما چگونه اطلاعات جلسه کاربران را در تمام صفحات وب نگه داریم؟

در بسیاری از موارد، استفاده از کوکی‌ها روشی کارآمد برای یادآوری و پیگیری ترجیحات، خریدها، کمیسیون‌ها و سایر اطلاعات مورد نیاز برای تجربه بازدیدکنندگان بهتر یا آمار سایت است.

چگونگی عملکرد

سرور شما برخی اطلاعات را به مرورگر بازدیدکننده به شکل یک کوکی ارسال می‌کند. مرورگر ممکن است کوکی را پذیرفته باشد. اگر این کار را کند، به عنوان یک رکورد متن ساده در حافظه‌ی دائمی بازدیدکننده ذخیره می‌شود. اکنون، هنگامی که بازدیدکننده به صفحه دیگری در سایت شما می‌رسد، مرورگر همان کوکی را به سرور برای بازیابی ارسال می‌کند. یک بار بازیابی شده، سرور شما می‌داند/یاد می‌آورد چه چیزی قبلاً ذخیره شده بود.

کوکی‌ها یک رکورد داده‌ی متن ساده از 5 فیلد متغیر زیر است:

  • انقضاء (Expires) – تاریخی که کوکی منقضی می‌شود. اگر این فیلد خالی باشد، کوکی زمانی منقضی می‌شود که بازدیدکننده مرورگر را ببندد.
  • دامنه (Domain) – نام دامنه وب‌سایت شما.
  • مسیر (Path) – مسیر به دایرکتوری یا صفحه‌ای که کوکی را تنظیم کرده‌است. این می‌تواند خالی باشد اگر می‌خواهید کوکی را از هر دایرکتوری یا صفحه‌ای بازیابی کنید.
  • امن (Secure) – اگر این فیلد حاوی کلمه “secure” باشد، کوکی فقط می‌تواند با یک سرور امن بازیابی شود. اگر این فیلد خالی باشد، هیچ محدودیتی وجود ندارد.
  • نام=مقدار (Name=Value) – کوکی‌ها به صورت جفت‌های کلید-مقدار تنظیم و بازیابی می‌شوند. کوکی‌ها ابتدا برای برنامه‌نویسی CGI طراحی شده‌اند. داده‌های موجود در یک کوکی به صورت خودکار بین مرورگر و سرور وب انتقال می‌یابد، بنابراین اسکریپت‌های CGI در سرور می‌توانند مقادیر کوکی را که در کلاینت ذخیره شده‌اند، بخوانند و بنویسند.

همچنین، جاوااسکریپت قادر به مدیریت کوکی‌ها با استفاده از خصوصیت cookie شیء Document است. جاوااسکریپت قادر به خواندن، ایجاد، اصلاح و حذف کوکی‌هایی است که برای صفحه وب فعلی اعمال می‌شود

ذخیره کردن کوکی‌ها (Storing Cookies)

ساده‌ترین روش برای ایجاد یک کوکی، اختصاص یک مقدار رشته‌ای به شیء document.cookie است که به این صورت است:
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>
اکنون سیستم شما یک کوکی با نام name دارد. می‌توانید با استفاده از چندین جفت کلید = مقدار جداشده با ویرگول، چندین کوکی را تنظیم کنید.

خواندن کوکی‌ها (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’ به یک تاریخ و زمان انجام می‌شود.

مثال

سعی کنید مثال زیر را امتحان کنید. این نشان می‌دهد که چگونه تاریخ انقضای یک کوکی را به مدت 1 ماه گسترش دهید:
<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>

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.