เซสชัน PHP และคุกกี้ PHP พร้อมตัวอย่าง

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

คุกกี้คือไฟล์ขนาดเล็กที่มีขนาดสูงสุด 4KB ที่เว็บเซิร์ฟเวอร์จัดเก็บไว้ในคอมพิวเตอร์ไคลเอนต์

เมื่อตั้งค่าคุกกี้แล้ว คำขอเพจทั้งหมดที่ตามมาจะส่งคืนชื่อและค่าคุกกี้

คุกกี้สามารถอ่านได้จากโดเมนที่ออกเท่านั้น ตัวอย่างเช่น คุกกี้ที่ตั้งค่าโดยใช้โดเมน www.guru99.com ไม่สามารถอ่านจากโดเมนได้ อาชีพ.guru99.com.

เว็บไซต์ส่วนใหญ่บนอินเทอร์เน็ตแสดงองค์ประกอบจากโดเมนอื่น เช่น การโฆษณา โดเมนที่ให้บริการองค์ประกอบเหล่านี้สามารถตั้งค่าคุกกี้ของตนเองได้เช่นกัน สิ่งเหล่านี้เรียกว่าคุกกี้ของบุคคลที่สาม

คุกกี้ที่สร้างโดยผู้ใช้สามารถมองเห็นได้เพียงพวกเขาเท่านั้น ผู้ใช้รายอื่นไม่สามารถมองเห็นคุณค่าของมันได้

เว็บเบราว์เซอร์ส่วนใหญ่มีตัวเลือกสำหรับการปิดการใช้งานคุกกี้ คุกกี้ของบุคคลที่สาม หรือทั้งสองอย่าง

หากเป็นกรณีนี้ PHP จะตอบกลับโดยส่งโทเค็นคุกกี้ใน URL

แผนภาพด้านล่างแสดงวิธีการทำงานของคุกกี้

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

ที่นี่

1) ผู้ใช้ร้องขอเพจที่เก็บคุกกี้

2) เซิร์ฟเวอร์ตั้งค่าคุกกี้บนคอมพิวเตอร์ของผู้ใช้

3) คำขอหน้าอื่นจากผู้ใช้จะส่งคืนชื่อคุกกี้และค่า

เพราะเหตุใดและเมื่อใดจึงควรใช้คุกกี้?

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

การสร้างคุกกี้

ตอนนี้เรามาดูไวยากรณ์พื้นฐานที่ใช้สร้างคุกกี้กัน

<?php

setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]);

?>

ที่นี่

  • Php“setcookie” คือไฟล์ ฟังก์ชั่น PHP ใช้ในการสร้างคุกกี้
  • “cookie_name” คือชื่อของคุกกี้ที่เซิร์ฟเวอร์จะใช้เมื่อดึงค่าจากตัวแปรอาร์เรย์ $_COOKIE มันเป็นข้อบังคับ
  • “cookie_value” คือค่าของคุกกี้และค่าบังคับ
  • “[expiry_time]” เป็นทางเลือก; สามารถใช้ตั้งเวลาหมดอายุของคุกกี้ได้ เช่น 1 ชั่วโมง เวลาถูกตั้งค่าโดยใช้ฟังก์ชัน PHP time() บวกหรือลบจำนวนวินาทีที่มากกว่า 0 เช่น time() + 3600 เป็นเวลา 1 ชั่วโมง
  • “[cookie_path]” เป็นทางเลือก; สามารถใช้เพื่อกำหนดเส้นทางคุกกี้บนเซิร์ฟเวอร์ เครื่องหมายทับ “/” หมายความว่าคุกกี้จะพร้อมใช้งานบนทั้งโดเมน ไดเรกทอรีย่อยจำกัดการเข้าถึงคุกกี้ในโดเมนย่อย
  • “[โดเมน]” เป็นทางเลือก ซึ่งสามารถใช้เพื่อกำหนดลำดับชั้นการเข้าถึงคุกกี้ได้ เช่น www.cookiedomain.com หมายถึงทั้งโดเมนในขณะที่ www.sub.cookiedomain.com จำกัดการเข้าถึงคุกกี้ www.sub.cookiedomain.com และโดเมนย่อยของมัน โปรดทราบว่า เป็นไปได้ที่จะมีโดเมนย่อยของโดเมนย่อย ตราบใดที่จำนวนอักขระทั้งหมดไม่เกิน 253 อักขระ
  • "[ปลอดภัย]" เป็นทางเลือก ค่าเริ่มต้นคือเท็จ ใช้เพื่อตรวจสอบว่าคุกกี้ถูกส่งผ่าน https หากตั้งค่าเป็นจริง หรือ http หากตั้งค่าเป็นเท็จ
  • “[Httponly]” เป็นทางเลือก หากตั้งค่าเป็นจริง จะแสดงเฉพาะภาษาสคริปต์ฝั่งไคลเอ็นต์เท่านั้น เช่น Javaต้นฉบับ ไม่สามารถเข้าถึงได้

หมายเหตุ ฟังก์ชันคุกกี้ชุด php จะต้องดำเนินการก่อนแท็กเปิด HTML

ตอนนี้เรามาดูตัวอย่างที่ใช้คุกกี้กัน

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

โค้ดด้านล่างแสดงการใช้งานตัวอย่างข้างต้น “cookies.php”

<?php
     setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds
     echo 'the cookie has been set for 60 seconds';
?>

Output:

the cookie has been set for 60 seconds

กำลังดึงค่าคุกกี้

สร้างไฟล์อีกไฟล์ชื่อ “cookies_read.php” พร้อมด้วยโค้ดต่อไปนี้

<?php
     print_r($_COOKIE);    //output the contents of the cookie array variable 
?>

Output:

Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )

หมายเหตุ: $_COOKIE เป็น PHP ที่สร้างขึ้นในตัวแปรระดับโลกขั้นสูง

ประกอบด้วยชื่อและค่าของคุกกี้ที่ตั้งค่าไว้ทั้งหมด

จำนวนค่าที่

อาร์เรย์ $_COOKIE สามารถมีได้ขึ้นอยู่กับขนาดหน่วยความจำที่ตั้งไว้ใน php.ini

ค่าเริ่มต้นคือ 1GB

การทดสอบแอปพลิเคชันของเรา

สมมติว่าคุณได้บันทึกไฟล์ PHP ของคุณในโฟลเดอร์ phptus แล้ว

  • ขั้นตอนที่ 1 - เปิดเว็บเบราว์เซอร์ของคุณและป้อน URL http://localhost/phptuts/cookies_read.php

กำลังดึงค่าคุกกี้

หมายเหตุ: แสดงเฉพาะอาร์เรย์ว่างเท่านั้น

  • ขั้นตอนที่ 2 - เบราว์เซอร์ไปยัง URL http://localhost/phptuts/cookies.php

กำลังดึงค่าคุกกี้

  • ขั้นตอนที่ 3 - สลับกลับไปที่แท็บแรกจากนั้นคลิกที่ปุ่มรีเฟรช

กำลังดึงค่าคุกกี้

รอสักครู่แล้วคลิกปุ่มรีเฟรชอีกครั้ง คุณได้รับผลลัพธ์อะไรบ้าง?

ลบคุกกี้

  • หากคุณต้องการทำลายคุกกี้ก่อนเวลาหมดอายุ คุณจะต้องตั้งเวลาหมดอายุเป็นเวลาที่ผ่านไปแล้ว
  • สร้างไฟล์ใหม่ชื่อ cookie_destroy.php ด้วยโค้ดต่อไปนี้
<?php

 setcookie("user_name", "Guru99", time() - 360,'/');

?>
  • ทำซ้ำขั้นตอนที่ 1 ถึง 3 จากส่วนด้านบนในการดึงค่าคุกกี้
  • เปิด URL http://localhost/phptuts/cookie_destroy.php
  • สลับไปที่ URL http://localhost/phptuts/cookies_read.php มันแสดงผลอะไร?

เซสชั่นคืออะไร?

  • เซสชันเป็นตัวแปรส่วนกลางที่เก็บไว้บนเซิร์ฟเวอร์
  • แต่ละเซสชันจะได้รับการกำหนดรหัสเฉพาะซึ่งใช้ในการดึงค่าที่เก็บไว้
  • เมื่อใดก็ตามที่มีการสร้างเซสชัน คุกกี้ที่มี ID เซสชันเฉพาะจะถูกเก็บไว้ในคอมพิวเตอร์ของผู้ใช้และส่งกลับพร้อมคำขอทุกครั้งที่ส่งไปยังเซิร์ฟเวอร์ หากเบราว์เซอร์ไคลเอนต์ไม่รองรับคุกกี้ ID เซสชัน PHP เฉพาะจะแสดงใน URL
  • เซสชันมีความสามารถในการจัดเก็บข้อมูลที่ค่อนข้างใหญ่เมื่อเทียบกับคุกกี้
  • ค่าเซสชันจะถูกลบโดยอัตโนมัติเมื่อปิดเบราว์เซอร์ หากคุณต้องการจัดเก็บค่าอย่างถาวร คุณควรเก็บไว้ในฐานข้อมูล
  • เช่นเดียวกับตัวแปรอาร์เรย์ $_COOKIE ตัวแปรเซสชันจะถูกจัดเก็บไว้ในตัวแปรอาร์เรย์ $_SESSION เช่นเดียวกับคุกกี้ เซสชันต้องเริ่มต้นก่อนแท็ก HTML ใดๆ

เหตุใดจึงควรใช้เซสชันและเมื่อใด

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

การสร้างเซสชัน

ในการสร้างเซสชัน คุณต้องเรียกใช้ฟังก์ชัน PHP session_start ก่อน จากนั้นจึงจัดเก็บค่าของคุณในตัวแปรอาร์เรย์ $_SESSION

สมมติว่าเราต้องการทราบจำนวนครั้งที่โหลดเพจ เราสามารถใช้เซสชันในการโหลดได้

รหัสด้านล่างแสดงวิธีการสร้างและดึงค่าจากเซสชัน

<?php

session_start(); //start the PHP_session function 

if(isset($_SESSION['page_count']))
{
     $_SESSION['page_count'] += 1;
}
else
{
     $_SESSION['page_count'] = 1;
}
 echo 'You are visitor number ' . $_SESSION['page_count'];

?>

Output:

You are visitor number 1

การทำลายตัวแปรเซสชัน

ฟังก์ชัน session_destroy() ใช้เพื่อทำลายตัวแปรเซสชัน Php ทั้งหมด

หากคุณต้องการทำลายเพียงรายการเดียวของเซสชัน คุณใช้ฟังก์ชัน unset()

รหัสด้านล่างแสดงวิธีการใช้ทั้งสองวิธี

<?php

 session_destroy(); //destroy entire session 

?>
<?php

unset($_SESSION['product']); //destroy product session item 

?>

Session_destroy ลบข้อมูลเซสชันทั้งหมดรวมถึงคุกกี้ที่เกี่ยวข้องกับเซสชัน

การไม่ตั้งค่าจะทำให้เฉพาะตัวแปรเซสชันแต่ละตัวว่างเท่านั้น

ข้อมูลอื่นๆ ยังคงไม่บุบสลาย

สรุป

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