본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

Session Management: การเก็บข้อมูลใน Session

Session Management: การเก็บข้อมูลใน Session

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

การใช้งาน $_SESSION

ตัวแปร $_SESSION คือ Superglobal Array ใน PHP ที่ใช้สำหรับเก็บข้อมูล Session ข้อมูลที่เก็บใน $_SESSION จะสามารถเข้าถึงได้ในทุกๆ หน้าของเว็บไซต์ ตราบใดที่ Session ได้ถูกเริ่มต้นด้วย session_start()

วิธีการใช้งาน $_SESSION นั้นง่ายมาก เราสามารถกำหนดค่าให้กับ Key ใดๆ ใน Array นี้ได้เหมือนกับการใช้งาน Array ทั่วไป

<?php
session_start();

// เก็บชื่อผู้ใช้ใน Session
$_SESSION['username'] = 'JohnDoe';

// เก็บ ID ผู้ใช้ใน Session
$_SESSION['user_id'] = 123;

// เก็บสถานะการเข้าสู่ระบบ
$_SESSION['logged_in'] = true;

echo 'ข้อมูลถูกเก็บใน Session แล้ว';
?>

ในตัวอย่างข้างต้น เราได้เก็บข้อมูล 3 อย่างไว้ใน Session:

  • username: ชื่อผู้ใช้
  • user_id: ID ของผู้ใช้
  • logged_in: สถานะการเข้าสู่ระบบ

เมื่อต้องการเข้าถึงข้อมูลที่เก็บไว้ใน Session เราก็สามารถใช้ $_SESSION ได้เช่นกัน

<?php
session_start();

// ตรวจสอบว่ามี username ใน Session หรือไม่
if (isset($_SESSION['username'])) {
    echo 'ยินดีต้อนรับ, ' . $_SESSION['username'] . '!';
} else {
    echo 'กรุณาเข้าสู่ระบบ';
}
?>

ในตัวอย่างนี้ เราตรวจสอบว่ามี username ใน Session หรือไม่ ถ้ามี ก็จะแสดงข้อความต้อนรับ หากไม่มี ก็จะแสดงข้อความให้เข้าสู่ระบบ

การเก็บข้อมูลที่จำเป็น

การเก็บข้อมูลใน Session ควรจำกัดเฉพาะข้อมูลที่จำเป็นสำหรับการใช้งานเท่านั้น ข้อมูลที่จำเป็นโดยทั่วไปมักจะเป็น:

  • ข้อมูลประจำตัวผู้ใช้: เช่น ID ผู้ใช้, ชื่อผู้ใช้, อีเมล
  • สถานะการเข้าสู่ระบบ: เพื่อตรวจสอบว่าผู้ใช้ได้เข้าสู่ระบบแล้วหรือไม่
  • สิทธิ์การใช้งาน: เช่น สิทธิ์ในการเข้าถึงหน้าผู้ดูแลระบบ
  • ข้อมูลตะกร้าสินค้า: สำหรับเว็บไซต์ E-commerce
  • การตั้งค่าผู้ใช้: เช่น ภาษาที่ใช้, รูปแบบวันที่

ตัวอย่างการเก็บข้อมูลตะกร้าสินค้า:

<?php
session_start();

// เพิ่มสินค้าลงในตะกร้า
if (isset($_POST['add_to_cart'])) {
    $product_id = $_POST['product_id'];
    $quantity = $_POST['quantity'];

    // ตรวจสอบว่ามีตะกร้าสินค้าใน Session หรือไม่
    if (!isset($_SESSION['cart'])) {
        $_SESSION['cart'] = [];
    }

    // เพิ่มสินค้าลงในตะกร้า
    $_SESSION['cart'][$product_id] = $quantity;

    echo 'เพิ่มสินค้าลงในตะกร้าแล้ว';
}
?>

<form method="post">
    <input type="hidden" name="product_id" value="123">
    <input type="hidden" name="quantity" value="1">
    <button type="submit" name="add_to_cart">เพิ่มลงตะกร้า</button>
</form>

<?php
// แสดงสินค้าในตะกร้า
if (isset($_SESSION['cart'])) {
    echo '<h3>สินค้าในตะกร้า</h3>';
    echo '<ul>';
    foreach ($_SESSION['cart'] as $product_id => $quantity) {
        echo '<li>Product ID: ' . $product_id . ', Quantity: ' . $quantity . '</li>';
    }
    echo '</ul>';
}
?>

ในตัวอย่างนี้ เราใช้ $_SESSION['cart'] เพื่อเก็บข้อมูลตะกร้าสินค้า โดยใช้ Product ID เป็น Key และ Quantity เป็น Value

การหลีกเลี่ยงการเก็บข้อมูลที่ละเอียดอ่อน

สิ่งสำคัญที่สุดในการจัดการ Session คือการหลีกเลี่ยงการเก็บข้อมูลที่ละเอียดอ่อนโดยตรงใน Session ข้อมูลที่ละเอียดอ่อน ได้แก่:

  • รหัสผ่าน: ห้ามเก็บรหัสผ่านที่ไม่ผ่านการ Hash ใน Session เด็ดขาด
  • ข้อมูลบัตรเครดิต: ห้ามเก็บข้อมูลบัตรเครดิตใน Session
  • ข้อมูลส่วนตัวที่ละเอียดอ่อน: เช่น หมายเลขประกันสังคม, ข้อมูลทางการแพทย์

ถ้าจำเป็นต้องใช้ข้อมูลที่ละเอียดอ่อน ควรเก็บเฉพาะ ID ของข้อมูลนั้นๆ แล้วดึงข้อมูลจากฐานข้อมูลเมื่อต้องการใช้งาน ตัวอย่างเช่น แทนที่จะเก็บข้อมูลบัตรเครดิตใน Session ให้เก็บเฉพาะ Credit Card ID แล้วดึงข้อมูลบัตรเครดิตจากฐานข้อมูล (โดยเข้ารหัสข้อมูลในฐานข้อมูลอย่างปลอดภัย) เมื่อต้องการชำระเงิน

นอกจากนี้ ควรใช้ HTTPS เพื่อเข้ารหัสการสื่อสารระหว่าง Browser และ Server เพื่อป้องกันการดักจับข้อมูล Session Cookie

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย

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

ระบบ Login เป็นกรณีใช้งานที่พบบ่อยที่สุดสำหรับการจัดการ Session เมื่อผู้ใช้ Login สำเร็จ เราจะเก็บข้อมูลที่จำเป็นของผู้ใช้ไว้ใน Session เช่น User ID และ Username เพื่อให้ระบบรู้ว่าผู้ใช้ได้ Login แล้ว

<?php
session_start();

// ตรวจสอบข้อมูล Login จากฐานข้อมูล
$username = $_POST['username'];
$password = $_POST['password'];

// (สมมติว่า $user คือข้อมูลผู้ใช้ที่ได้จากการตรวจสอบในฐานข้อมูล)
$user = // ... (ดึงข้อมูลผู้ใช้จากฐานข้อมูลโดยใช้ username)

if ($user && password_verify($password, $user['password'])) {
    // Login สำเร็จ
    $_SESSION['user_id'] = $user['id'];
    $_SESSION['username'] = $user['username'];
    $_SESSION['logged_in'] = true;

    echo 'Login สำเร็จ! ยินดีต้อนรับ, ' . $_SESSION['username'] . '!';
} else {
    // Login ไม่สำเร็จ
    echo 'Username หรือ Password ไม่ถูกต้อง';
}
?>

หลังจาก Login สำเร็จ เราจะเก็บ user_id, username และ logged_in ไว้ใน Session เพื่อใช้ในการตรวจสอบสิทธิ์การใช้งานในหน้าอื่นๆ

ข้อผิดพลาดที่พบบ่อย: session_start() ไม่ได้ถูกเรียกใช้งาน

ข้อผิดพลาดที่พบบ่อยที่สุดคือการลืมเรียกใช้งาน session_start() ก่อนที่จะใช้งาน $_SESSION หากไม่ได้เรียกใช้งาน session_start() การเข้าถึง $_SESSION จะไม่ทำงานและอาจทำให้เกิดข้อผิดพลาดหรือพฤติกรรมที่ไม่คาดคิด

<?php
// ลืมเรียกใช้งาน session_start()
// session_start();

$_SESSION['error'] = 'เกิดข้อผิดพลาด!'; // บรรทัดนี้จะไม่ทำงานหากไม่ได้เรียก session_start()

echo $_SESSION['error']; // อาจเกิดข้อผิดพลาด หรือไม่ได้แสดงผลลัพธ์ที่ต้องการ
?>

วิธีแก้ไข: ตรวจสอบให้แน่ใจว่า session_start() ถูกเรียกใช้งานในทุกๆ หน้าที่ต้องการใช้งาน $_SESSION และต้องเรียกใช้งานก่อนที่จะมีการส่ง Output ใดๆ ไปยัง Browser

ข้อผิดพลาดที่พบบ่อย: การเก็บข้อมูลมากเกินไปใน Session

การเก็บข้อมูลมากเกินไปใน Session อาจทำให้ประสิทธิภาพของเว็บไซต์ลดลง เนื่องจากข้อมูล Session จะถูกเก็บไว้ใน Server และถูกส่งไปพร้อมกับ Cookie ในทุกๆ Request ดังนั้น ควรเก็บเฉพาะข้อมูลที่จำเป็นเท่านั้น

วิธีแก้ไข: พิจารณาว่าข้อมูลใดที่จำเป็นต้องเก็บไว้ใน Session และข้อมูลใดที่สามารถดึงมาจากฐานข้อมูลได้เมื่อต้องการใช้งาน

สรุป

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

ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับการทำลาย Session เมื่อผู้ใช้ออกจากระบบหรือเมื่อ Session หมดอายุ

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기