JavaScript และคุกกี้

คุกกี้คืออะไร?

เว็บเบราว์เซอร์และเซิร์ฟเวอร์ใช้โปรโตคอล HTTP ในการสื่อสารและ HTTP เป็นโปรโตคอลไร้รัฐ แต่สำหรับเว็บไซต์เชิงพาณิชย์จำเป็นต้องรักษาข้อมูลเซสชันระหว่างหน้าต่างๆ ตัวอย่างเช่นการลงทะเบียนผู้ใช้หนึ่งคนจะสิ้นสุดลงหลังจากเสร็จสิ้นหลายหน้า แต่จะรักษาข้อมูลเซสชันของผู้ใช้ในหน้าเว็บทั้งหมดได้อย่างไร

ในหลาย ๆ สถานการณ์การใช้คุกกี้เป็นวิธีที่มีประสิทธิภาพที่สุดในการจดจำและติดตามการตั้งค่าการซื้อค่าคอมมิชชั่นและข้อมูลอื่น ๆ ที่จำเป็นสำหรับประสบการณ์ของผู้เยี่ยมชมหรือสถิติไซต์ที่ดีขึ้น

มันทำงานอย่างไร ?

เซิร์ฟเวอร์ของคุณส่งข้อมูลบางส่วนไปยังเบราว์เซอร์ของผู้เยี่ยมชมในรูปแบบของคุกกี้ เบราว์เซอร์อาจยอมรับคุกกี้ หากเป็นเช่นนั้นระบบจะจัดเก็บเป็นบันทึกข้อความธรรมดาในฮาร์ดไดรฟ์ของผู้เยี่ยมชม ตอนนี้เมื่อผู้เยี่ยมชมมาถึงหน้าอื่นบนไซต์ของคุณเบราว์เซอร์จะส่งคุกกี้เดียวกันไปยังเซิร์ฟเวอร์เพื่อเรียกค้น เมื่อดึงข้อมูลเซิร์ฟเวอร์ของคุณจะรู้ / จำสิ่งที่เก็บไว้ก่อนหน้านี้

คุกกี้คือบันทึกข้อมูลข้อความธรรมดาของฟิลด์ความยาวตัวแปร 5 ช่อง -

  • Expires- วันที่คุกกี้จะหมดอายุ หากว่างเปล่าคุกกี้จะหมดอายุเมื่อผู้เยี่ยมชมออกจากเบราว์เซอร์

  • Domain - ชื่อโดเมนของไซต์ของคุณ

  • Path- เส้นทางไปยังไดเร็กทอรีหรือเว็บเพจที่ตั้งค่าคุกกี้ ซึ่งอาจว่างเปล่าหากคุณต้องการดึงคุกกี้จากไดเร็กทอรีหรือเพจใด ๆ

  • Secure- หากช่องนี้มีคำว่า "ปลอดภัย" คุกกี้จะถูกเรียกคืนด้วยเซิร์ฟเวอร์ที่ปลอดภัยเท่านั้น หากฟิลด์นี้ว่างแสดงว่าไม่มีข้อ จำกัด ดังกล่าว

  • Name=Value - คุกกี้ถูกตั้งค่าและเรียกดูในรูปแบบของคู่คีย์ - ค่า

เดิมคุกกี้ถูกออกแบบมาสำหรับการเขียนโปรแกรม CGI ข้อมูลที่อยู่ในคุกกี้จะถูกส่งโดยอัตโนมัติระหว่างเว็บเบราว์เซอร์และเว็บเซิร์ฟเวอร์ดังนั้นสคริปต์ CGI บนเซิร์ฟเวอร์จึงสามารถอ่านและเขียนค่าคุกกี้ที่เก็บไว้บนไคลเอนต์ได้

JavaScript ยังสามารถจัดการคุกกี้โดยใช้ไฟล์ cookie คุณสมบัติของ Documentวัตถุ. JavaScript สามารถอ่านสร้างแก้ไขและลบคุกกี้ที่ใช้กับหน้าเว็บปัจจุบัน

การจัดเก็บคุกกี้

วิธีที่ง่ายที่สุดในการสร้างคุกกี้คือกำหนดค่าสตริงให้กับอ็อบเจกต์ document.cookie ซึ่งมีลักษณะดังนี้

document.cookie = "key1 = value1;key2 = value2;expires = date";

ที่นี่ expiresแอตทริบิวต์เป็นทางเลือก หากคุณระบุแอตทริบิวต์นี้พร้อมกับวันที่หรือเวลาที่ถูกต้องคุกกี้จะหมดอายุในวันที่หรือเวลาที่กำหนดและหลังจากนั้นจะไม่สามารถเข้าถึงค่าของคุกกี้ได้

Note- ค่าคุกกี้ต้องไม่รวมอัฒภาคจุลภาคหรือช่องว่าง ด้วยเหตุนี้คุณอาจต้องการใช้ JavaScriptescape()ฟังก์ชันเข้ารหัสค่าก่อนจัดเก็บในคุกกี้ หากคุณทำเช่นนี้คุณจะต้องใช้ไฟล์unescape() เมื่อคุณอ่านค่าคุกกี้

ตัวอย่าง

ลองทำดังต่อไปนี้ ตั้งชื่อลูกค้าในคุกกี้ป้อนข้อมูล

<html>
   <head>   
      <script type = "text/javascript">
         <!--
            function WriteCookie() {
               if( document.myform.customer.value == "" ) {
                  alert("Enter some value!");
                  return;
               }
               cookievalue = escape(document.myform.customer.value) + ";";
               document.cookie = "name=" + cookievalue;
               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>

เอาต์พุต

ตอนนี้เครื่องของคุณมีคุกกี้ชื่อว่า name. คุณสามารถตั้งค่าคุกกี้หลายรายการโดยใช้คู่คีย์ = ค่าหลายคู่โดยคั่นด้วยลูกน้ำ

คุกกี้การอ่าน

การอ่านคุกกี้นั้นง่ายพอ ๆ กับการเขียนคุกกี้เพราะค่าของอ็อบเจกต์ document.cookie คือคุกกี้ ดังนั้นคุณสามารถใช้สตริงนี้ได้ทุกเมื่อที่คุณต้องการเข้าถึงคุกกี้ สตริง document.cookie จะเก็บรายการของคู่ชื่อ = ค่าโดยคั่นด้วยอัฒภาคโดยที่name คือชื่อของคุกกี้และค่าคือค่าสตริง

คุณสามารถใช้สตริง ' 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>

Note - ที่นี่ length เป็นวิธีการของ Arrayคลาสที่ส่งกลับความยาวของอาร์เรย์ เราจะพูดถึงอาร์เรย์ในบทที่แยกต่างหาก เมื่อถึงเวลานั้นโปรดพยายามย่อยมัน

Note- อาจมีคุกกี้อื่น ๆ ตั้งอยู่ในเครื่องของคุณแล้ว รหัสด้านบนจะแสดงคุกกี้ทั้งหมดที่ตั้งไว้ในเครื่องของคุณ

การตั้งค่าวันหมดอายุของคุกกี้

คุณสามารถยืดอายุของคุกกี้ได้นอกเหนือจากเซสชันของเบราว์เซอร์ปัจจุบันโดยตั้งค่าวันที่หมดอายุและบันทึกวันหมดอายุไว้ในคุกกี้ ซึ่งสามารถทำได้โดยการตั้งค่า‘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>

เอาต์พุต

การลบคุกกี้

บางครั้งคุณอาจต้องการลบคุกกี้เพื่อให้ความพยายามในการอ่านคุกกี้ในภายหลังไม่มีผลตอบแทน ในการดำเนินการนี้คุณเพียงแค่ตั้งวันหมดอายุเป็นเวลาในอดีต

ตัวอย่าง

ลองดูตัวอย่างต่อไปนี้ แสดงให้เห็นถึงวิธีการลบคุกกี้โดยตั้งค่าวันหมดอายุเป็นหนึ่งเดือนหลังวันที่ปัจจุบัน

<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>

เอาต์พุต