PHP - คุกกี้

คุกกี้คือไฟล์ข้อความที่เก็บไว้ในคอมพิวเตอร์ไคลเอนต์และเก็บไว้เพื่อวัตถุประสงค์ในการติดตามการใช้งาน PHP สนับสนุนคุกกี้ HTTP อย่างโปร่งใส

มีสามขั้นตอนที่เกี่ยวข้องในการระบุผู้ใช้ที่กลับมา -

  • สคริปต์เซิร์ฟเวอร์ส่งชุดคุกกี้ไปยังเบราว์เซอร์ เช่นชื่ออายุหรือหมายเลขประจำตัวเป็นต้น

  • เบราว์เซอร์เก็บข้อมูลนี้ไว้ในเครื่องท้องถิ่นเพื่อใช้ในอนาคต

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

บทนี้จะสอนวิธีตั้งค่าคุกกี้วิธีเข้าถึงและวิธีลบคุกกี้

กายวิภาคของคุกกี้

โดยปกติคุกกี้จะถูกตั้งค่าในส่วนหัว HTTP (แม้ว่า JavaScript จะสามารถตั้งค่าคุกกี้ได้โดยตรงบนเบราว์เซอร์ก็ตาม) สคริปต์ PHP ที่ตั้งค่าคุกกี้อาจส่งส่วนหัวที่มีลักษณะเช่นนี้ -

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/html

อย่างที่คุณเห็นส่วนหัว Set-Cookie มีคู่ค่าชื่อวันที่ GMT เส้นทางและโดเมน ชื่อและค่าจะถูกเข้ารหัส URL ช่องหมดอายุคือคำสั่งให้เบราว์เซอร์ "ลืม" คุกกี้หลังจากเวลาและวันที่ที่กำหนด

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

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

จากนั้นสคริปต์ PHP จะสามารถเข้าถึงคุกกี้ในตัวแปรสภาพแวดล้อม $ _COOKIE หรือ $ HTTP_COOKIE_VARS [] ซึ่งเก็บชื่อและค่าคุกกี้ทั้งหมด คุกกี้ด้านบนสามารถเข้าถึงได้โดยใช้ $ HTTP_COOKIE_VARS ["name"]

การตั้งค่าคุกกี้ด้วย PHP

PHP ให้ setcookie()ฟังก์ชันในการตั้งค่าคุกกี้ ฟังก์ชันนี้ต้องการอาร์กิวเมนต์ไม่เกินหกอาร์กิวเมนต์และควรเรียกก่อนแท็ก <html> สำหรับแต่ละคุกกี้จะต้องเรียกใช้ฟังก์ชันนี้แยกกัน

setcookie(name, value, expire, path, domain, security);

นี่คือรายละเอียดของข้อโต้แย้งทั้งหมด -

  • Name- ตั้งชื่อคุกกี้และเก็บไว้ในตัวแปรสภาพแวดล้อมที่เรียกว่า HTTP_COOKIE_VARS ตัวแปรนี้ใช้ขณะเข้าถึงคุกกี้

  • Value - กำหนดค่าของตัวแปรที่ระบุชื่อและเป็นเนื้อหาที่คุณต้องการจัดเก็บจริง

  • Expiry- สิ่งนี้ระบุเวลาในอนาคตเป็นวินาทีตั้งแต่ 00:00:00 GMT ของวันที่ 1 มกราคม 1970 หลังจากเวลานี้คุกกี้จะไม่สามารถเข้าถึงได้ หากไม่ได้ตั้งค่าพารามิเตอร์นี้คุกกี้จะหมดอายุโดยอัตโนมัติเมื่อปิดเว็บเบราว์เซอร์

  • Path- สิ่งนี้ระบุไดเร็กทอรีที่คุกกี้ถูกต้อง อักขระสแลชไปข้างหน้าเพียงตัวเดียวอนุญาตให้คุกกี้สามารถใช้ได้กับไดเร็กทอรีทั้งหมด

  • Domain- สามารถใช้เพื่อระบุชื่อโดเมนในโดเมนขนาดใหญ่มากและต้องมีอย่างน้อยสองช่วงเวลาจึงจะถูกต้อง คุกกี้ทั้งหมดใช้ได้เฉพาะกับโฮสต์และโดเมนที่สร้างขึ้น

  • Security - สามารถตั้งค่าเป็น 1 เพื่อระบุว่าควรส่งคุกกี้โดยการส่งแบบปลอดภัยโดยใช้ HTTPS เท่านั้นหรือตั้งค่าเป็น 0 ซึ่งหมายความว่าคุกกี้สามารถส่งโดย HTTP ปกติ

ตัวอย่างต่อไปนี้จะสร้างคุกกี้สองตัว name และ age คุกกี้เหล่านี้จะหมดอายุหลังจากผ่านไปหนึ่งชั่วโมง

<?php
   setcookie("name", "John Watkin", time()+3600, "/","", 0);
   setcookie("age", "36", time()+3600, "/", "",  0);
?>
<html>
   
   <head>
      <title>Setting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Set Cookies"?>
   </body>
   
</html>

การเข้าถึงคุกกี้ด้วย PHP

PHP มีหลายวิธีในการเข้าถึงคุกกี้ วิธีที่ง่ายที่สุดคือใช้ตัวแปร $ _COOKIE หรือ $ HTTP_COOKIE_VARS ตัวอย่างต่อไปนี้จะเข้าถึงคุกกี้ทั้งหมดที่ตั้งไว้ในตัวอย่างข้างต้น

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         echo $_COOKIE["name"]. "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "<br />";
         
         echo $_COOKIE["age"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["age"] . "<br />";
      ?>
      
   </body>
</html>

คุณสามารถใช้ได้ isset() เพื่อตรวจสอบว่ามีการตั้งค่าคุกกี้หรือไม่

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         if( isset($_COOKIE["name"]))
            echo "Welcome " . $_COOKIE["name"] . "<br />";
         
         else
            echo "Sorry... Not recognized" . "<br />";
      ?>
      
   </body>
</html>

การลบคุกกี้ด้วย PHP

อย่างเป็นทางการในการลบคุกกี้คุณควรเรียก setcookie () ด้วยอาร์กิวเมนต์ชื่อเท่านั้น แต่วิธีนี้ใช้ไม่ได้ผลเสมอไปและไม่ควรพึ่งพา

ปลอดภัยที่สุดในการตั้งค่าคุกกี้ด้วยวันที่หมดอายุแล้ว -

<?php
   setcookie( "name", "", time()- 60, "/","", 0);
   setcookie( "age", "", time()- 60, "/","", 0);
?>
<html>
   
   <head>
      <title>Deleting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Deleted Cookies" ?>
   </body>
   
</html>