เซสชัน 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 ใด ๆ ไปยังเบราว์เซอร์