PHP - เซสชัน

อีกวิธีหนึ่งในการทำให้ข้อมูลสามารถเข้าถึงได้จากหน้าต่างๆของเว็บไซต์ทั้งหมดคือการใช้ PHP Session

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

ตำแหน่งของไฟล์ชั่วคราวถูกกำหนดโดยการตั้งค่าในไฟล์ php.ini เรียกว่าไฟล์ session.save_path. ก่อนใช้ตัวแปรเซสชันใด ๆ ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าเส้นทางนี้แล้ว

เมื่อเซสชันเริ่มต้นหลังจากสิ่งต่างๆเกิดขึ้น -

  • ขั้นแรก PHP จะสร้างตัวระบุเฉพาะสำหรับเซสชันนั้น ๆ ซึ่งเป็นสตริงสุ่ม 32 เลขฐานสิบหกเช่น 3c7foj34c3jj973hjkop2fc937e3443

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

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

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

เซสชันจะสิ้นสุดลงเมื่อผู้ใช้สูญเสียเบราว์เซอร์หรือหลังจากออกจากไซต์เซิร์ฟเวอร์จะยุติเซสชันหลังจากช่วงเวลาที่กำหนดไว้ล่วงหน้าซึ่งโดยทั่วไปจะมีระยะเวลา 30 นาที

เริ่มต้นเซสชัน PHP

เซสชัน PHP เริ่มต้นได้อย่างง่ายดายโดยการโทรไปที่ไฟล์ session_start()ฟังก์ชันนี้ก่อนอื่นจะตรวจสอบว่าเซสชันเริ่มต้นแล้วหรือไม่และหากไม่มีการเริ่มต้นจะเริ่มต้นใหม่ ขอแนะนำให้โทรไปที่session_start() ที่จุดเริ่มต้นของหน้า

ตัวแปรเซสชันจะถูกเก็บไว้ในอาร์เรย์เชื่อมโยงที่เรียกว่า $_SESSION[]. ตัวแปรเหล่านี้สามารถเข้าถึงได้ในช่วงชีวิตของเซสชัน

ตัวอย่างต่อไปนี้เริ่มต้นเซสชันจากนั้นลงทะเบียนตัวแปรที่เรียกว่า counter ที่เพิ่มขึ้นทุกครั้งที่มีการเยี่ยมชมเพจในระหว่างเซสชัน

ใช้ประโยชน์จาก isset() เพื่อตรวจสอบว่าตัวแปรเซสชันถูกตั้งค่าไว้แล้วหรือไม่

ใส่รหัสนี้ในไฟล์ test.php และโหลดไฟล์นี้หลาย ๆ ครั้งเพื่อดูผลลัพธ์ -

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

มันจะให้ผลลัพธ์ดังต่อไปนี้ -

You have visited this page 1in this session.

ทำลายเซสชัน PHP

เซสชัน PHP สามารถถูกทำลายโดย session_destroy()ฟังก์ชัน ฟังก์ชันนี้ไม่ต้องการอาร์กิวเมนต์ใด ๆ และการเรียกเพียงครั้งเดียวสามารถทำลายตัวแปรเซสชันทั้งหมดได้ หากคุณต้องการทำลายตัวแปรเซสชันเดียวคุณสามารถใช้unset() ฟังก์ชันเพื่อยกเลิกการตั้งค่าตัวแปรเซสชัน

นี่คือตัวอย่างในการยกเลิกการตั้งค่าตัวแปรเดียว -

<?php
   unset($_SESSION['counter']);
?>

นี่คือการเรียกที่จะทำลายตัวแปรเซสชันทั้งหมด -

<?php
   session_destroy();
?>

กำลังเปิดเซสชันอัตโนมัติ

คุณไม่จำเป็นต้องเรียกใช้ฟังก์ชัน start_session () เพื่อเริ่มเซสชันเมื่อผู้ใช้เข้าชมไซต์ของคุณหากคุณสามารถตั้งค่าได้ session.auto_start แปรผันเป็น 1 นิ้ว php.ini ไฟล์.

เซสชันที่ไม่มีคุกกี้

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

หรือคุณสามารถใช้ SID คงที่ซึ่งกำหนดไว้หากเซสชันเริ่มต้น หากไคลเอนต์ไม่ได้ส่งคุกกี้เซสชันที่เหมาะสมจะมีรูปแบบ session_name = session_id มิฉะนั้นจะขยายเป็นสตริงว่าง ดังนั้นคุณสามารถฝังลงใน URL ได้โดยไม่มีเงื่อนไข

ตัวอย่างต่อไปนี้แสดงวิธีการลงทะเบียนตัวแปรและวิธีการเชื่อมโยงไปยังเพจอื่นอย่างถูกต้องโดยใช้ SID

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

มันจะให้ผลลัพธ์ดังต่อไปนี้ -

You have visited this page 1in this session.
To continue click following link

htmlspecialchars() อาจใช้เมื่อพิมพ์ SID เพื่อป้องกันการโจมตีที่เกี่ยวข้องกับ XSS