メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Session Management: การทำลาย Session

บทความนี้อธิบายวิธีการทำลาย Session ใน PHP เพื่อรักษาความปลอดภัยของข้อมูลผู้ใช้ โดยเน้นการใช้ฟังก์ชัน `session_destroy()` เพื่อลบ Session ทั้งหมด และ `unset()`...

Session Management: การทำลาย Session

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

การทำลาย Session ด้วย session_destroy()

ฟังก์ชัน session_destroy() เป็นฟังก์ชันที่ใช้ในการทำลายข้อมูลทั้งหมดที่เก็บไว้ใน Session ปัจจุบัน รวมถึงลบไฟล์ Session ที่อยู่บนเซิร์ฟเวอร์ด้วย

ข้อควรระวัง: ก่อนที่จะเรียกใช้ session_destroy() เราต้องเริ่มต้น Session ก่อนเสมอด้วยฟังก์ชัน session_start()

ตัวอย่างการใช้งาน:

<?php
session_start();

// ทำลาย Session
session_destroy();

// Redirect ไปยังหน้า Login
header("Location: login.php");
exit();
?>

คำอธิบาย:

  1. session_start();: เริ่มต้น Session เพื่อให้เราสามารถเข้าถึงข้อมูล Session ได้
  2. session_destroy();: ทำลาย Session ทั้งหมด
  3. header("Location: login.php");: Redirect ผู้ใช้ไปยังหน้า Login หลังจากทำลาย Session แล้ว
  4. exit();: หยุดการทำงานของสคริปต์ เพื่อป้องกันการประมวลผลโค้ดที่เหลือ

กรณีใช้งานจริง:

สมมติว่าเรามีปุ่ม "ออกจากระบบ" บนเว็บไซต์ เมื่อผู้ใช้คลิกปุ่มนี้ เราจะเรียกใช้สคริปต์ที่ทำลาย Session และ Redirect ผู้ใช้ไปยังหน้า Login

<a href="logout.php">ออกจากระบบ</a>

และไฟล์ logout.php จะมีโค้ดดังนี้:

<?php
session_start();

// ลบข้อมูล Session ทั้งหมด
session_destroy();

// Redirect ไปยังหน้า Login
header("Location: login.php");
exit();
?>

การลบตัวแปร Session ด้วย unset()

บางครั้งเราอาจไม่ต้องการทำลาย Session ทั้งหมด แต่อาจต้องการลบเฉพาะบางตัวแปรใน Session เท่านั้น เราสามารถใช้ฟังก์ชัน unset() เพื่อลบตัวแปรที่ต้องการได้

ตัวอย่างการใช้งาน:

<?php
session_start();

// ลบตัวแปร username ออกจาก Session
unset($_SESSION['username']);

// Redirect ไปยังหน้า Login (ถ้า username เป็นสิ่งเดียวที่บอกว่า Login)
header("Location: login.php");
exit();
?>

คำอธิบาย:

  1. session_start();: เริ่มต้น Session เพื่อให้เราสามารถเข้าถึงข้อมูล Session ได้
  2. unset($_SESSION['username']);: ลบตัวแปร username ออกจาก Session
  3. header("Location: login.php");: Redirect ผู้ใช้ไปยังหน้า Login หลังจากลบตัวแปร username แล้ว (ในกรณีที่การ Login ขึ้นอยู่กับตัวแปรนี้)
  4. exit();: หยุดการทำงานของสคริปต์ เพื่อป้องกันการประมวลผลโค้ดที่เหลือ

กรณีใช้งานจริง:

สมมติว่าเราต้องการให้ผู้ใช้สามารถ "ลืมรหัสผ่าน" ได้ เราอาจจะเก็บข้อมูลบางอย่างไว้ใน Session เพื่อใช้ในการยืนยันตัวตน เมื่อผู้ใช้ทำการรีเซ็ตรหัสผ่านเสร็จสิ้น เราสามารถลบข้อมูลเหล่านั้นออกจาก Session ได้

<?php
session_start();

// ลบตัวแปรที่เกี่ยวข้องกับการรีเซ็ตรหัสผ่าน
unset($_SESSION['reset_token']);
unset($_SESSION['reset_email']);

// แสดงข้อความแจ้งว่ารีเซ็ตรหัสผ่านสำเร็จ
echo "<p>รีเซ็ตรหัสผ่านสำเร็จ</p>";
?>

การ Redirect ไปยังหน้า Login

หลังจากทำลาย Session หรือลบตัวแปร Session ที่สำคัญแล้ว สิ่งสำคัญคือต้อง Redirect ผู้ใช้ไปยังหน้า Login เพื่อให้ผู้ใช้สามารถ Login เข้าสู่ระบบได้อีกครั้ง

เราสามารถใช้ฟังก์ชัน header() เพื่อ Redirect ผู้ใช้ได้ ดังที่แสดงในตัวอย่างก่อนหน้านี้

ข้อควรระวัง:

  • ตรวจสอบให้แน่ใจว่าไม่มีการส่ง output ใดๆ ออกไปก่อนที่จะเรียกใช้ฟังก์ชัน header() มิฉะนั้นจะเกิดข้อผิดพลาด "Headers already sent"
  • ควรเรียกใช้ฟังก์ชัน exit() หลังจาก header() เพื่อหยุดการทำงานของสคริปต์

ตัวอย่างการ Redirect:

<?php
header("Location: login.php");
exit();
?>

ข้อผิดพลาดที่พบบ่อย

  1. เรียกใช้ session_destroy() โดยไม่ได้เริ่มต้น Session ก่อน: ทำให้เกิดข้อผิดพลาดหรือพฤติกรรมที่ไม่คาดคิด ควรเรียกใช้ session_start() ก่อนเสมอ
  2. พยายามเข้าถึงตัวแปร Session หลังจากทำลาย Session แล้ว: ตัวแปร Session จะไม่มีอยู่อีกต่อไปหลังจาก session_destroy() ดังนั้นการพยายามเข้าถึงจะทำให้เกิดข้อผิดพลาด
  3. ลืม Redirect ผู้ใช้ไปยังหน้า Login: ผู้ใช้อาจยังคงอยู่ในหน้าเดิมโดยไม่รู้ว่า Session ได้ถูกทำลายไปแล้ว ควร Redirect ผู้ใช้ไปยังหน้า Login เพื่อให้สามารถ Login เข้าสู่ระบบได้อีกครั้ง
  4. Headers already sent: ข้อผิดพลาดนี้เกิดขึ้นเมื่อมีการส่ง output ใดๆ ออกไปก่อนที่จะเรียกใช้ฟังก์ชัน header() ตรวจสอบให้แน่ใจว่าไม่มีการส่ง HTML หรือข้อความใดๆ ก่อนที่จะเรียกใช้ header()

สรุป

การทำลาย Session เป็นส่วนสำคัญของการจัดการ Session ใน PHP เราได้เรียนรู้วิธีการใช้ฟังก์ชัน session_destroy() เพื่อทำลาย Session ทั้งหมด และฟังก์ชัน unset() เพื่อลบตัวแปร Session เฉพาะ รวมถึงวิธีการ Redirect ผู้ใช้ไปยังหน้า Login หลังจากทำลาย Session แล้ว การเข้าใจและนำไปใช้ได้อย่างถูกต้องจะช่วยให้เราสามารถสร้างระบบ Login ที่ปลอดภัยและมีประสิทธิภาพมากยิ่งขึ้น

ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับการจัดการ Error ด้วย try-catch block เพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นในระหว่างการทำงานกับฐานข้อมูลและ Session

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る