跳到主要内容

เนื้อหาภาษาไทย / 泰语内容

系统指南 内容已审核

Superglobals: $_SESSION

บทความนี้แนะนำ `$_SESSION` ซึ่งเป็น Superglobal array ที่ใช้จัดการ Session ใน PHP โดย Session ช่วยให้เราเก็บข้อมูลผู้ใช้ไว้บน Server ระหว่างที่ผู้ใช้ใช้งานเว็บไ...

Superglobals: $_SESSION

ในบทเรียนก่อนหน้า เราได้เรียนรู้เกี่ยวกับ $_REQUEST ซึ่งเป็น Superglobal array ที่รวมข้อมูลจาก GET, POST และ COOKIE เข้าด้วยกัน ในบทนี้ เราจะมาทำความรู้จักกับ Superglobal array อีกตัวหนึ่งที่มีความสำคัญอย่างมากในการพัฒนาเว็บแอปพลิเคชัน นั่นคือ $_SESSION

ความหมายของ $_SESSION

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

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

ข้อแตกต่างที่สำคัญระหว่าง $_SESSION กับ $_COOKIE คือ $_SESSION เก็บข้อมูลบน Server ในขณะที่ $_COOKIE เก็บข้อมูลบน Client (Browser ของผู้ใช้) ทำให้ $_SESSION มีความปลอดภัยมากกว่า $_COOKIE

การเริ่มต้น Session ด้วย session_start()

ก่อนที่จะใช้งาน $_SESSION ได้ เราจะต้องทำการเริ่มต้น Session ก่อน โดยใช้ฟังก์ชัน session_start() ฟังก์ชันนี้จะสร้าง Session ID ใหม่ หรือดึง Session ID เดิม (ถ้ามี) จาก Cookie ที่ส่งมาจาก Browser ของผู้ใช้

สำคัญ: session_start() จะต้องถูกเรียกใช้งานก่อนที่จะมีการส่ง Output ใดๆ ออกไปยัง Browser (เช่น HTML, text) หากมีการส่ง Output ออกไปก่อน จะทำให้เกิด Error ได้

ตัวอย่าง:

<?php
session_start();

// โค้ดอื่นๆ ของเรา
?>

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

  • "Cannot send session cookie - headers already sent" error: เกิดจากการเรียก session_start() หลังจากการส่ง Output ใดๆ ออกไปยัง Browser แล้ว ตรวจสอบให้แน่ใจว่า session_start() ถูกเรียกใช้งานเป็นสิ่งแรกในไฟล์ PHP
  • เรียก session_start() ซ้ำ: ไม่จำเป็นต้องเรียก session_start() หลายครั้งในหน้าเดียวกัน หากเรียกใช้งานแล้ว ก็สามารถใช้งาน $_SESSION ได้เลย

การกำหนดและเข้าถึงค่าใน $_SESSION

เมื่อเราเริ่มต้น Session แล้ว เราสามารถกำหนดและเข้าถึงค่าใน $_SESSION ได้เหมือนกับ Array ทั่วไป

การกำหนดค่า:

<?php
session_start();

$_SESSION['username'] = 'JohnDoe';
$_SESSION['user_id'] = 123;
$_SESSION['is_logged_in'] = true;
?>

การเข้าถึงค่า:

<?php
session_start();

if (isset($_SESSION['username'])) {
    echo 'Username: ' . $_SESSION['username']; // Output: Username: JohnDoe
} else {
    echo 'Username not set.';
}

if ($_SESSION['is_logged_in'] === true) {
    echo '<p>User is logged in.</p>';
}
?>

การลบค่าออกจาก Session:

<?php
session_start();

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

// ลบ session ทั้งหมด
session_destroy();
?>

คำอธิบายเพิ่มเติม:

  • unset($_SESSION['username']); จะลบเฉพาะตัวแปร username ออกจาก $_SESSION Session ยังคงอยู่ และตัวแปรอื่นๆ ใน $_SESSION ยังสามารถใช้งานได้
  • session_destroy(); จะทำลาย Session ทั้งหมด ข้อมูลทั้งหมดใน $_SESSION จะถูกลบ และ Session ID จะถูกยกเลิก

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

  1. การจัดการ Login: เมื่อผู้ใช้ Login สำเร็จ เราสามารถเก็บข้อมูลผู้ใช้ไว้ใน $_SESSION เพื่อตรวจสอบว่าผู้ใช้ได้ Login แล้วหรือไม่ และแสดงข้อมูลที่เกี่ยวข้องกับผู้ใช้
  2. ตะกร้าสินค้า: ในเว็บไซต์ E-commerce เราสามารถเก็บข้อมูลสินค้าที่ผู้ใช้เลือกไว้ในตะกร้าใน $_SESSION เพื่อให้ผู้ใช้สามารถเลือกซื้อสินค้าได้หลายชิ้น และทำการ Checkout ได้ในภายหลัง
  3. การเก็บข้อมูลชั่วคราว: เราสามารถใช้ $_SESSION ในการเก็บข้อมูลชั่วคราวที่จำเป็นสำหรับการทำงานของเว็บไซต์ เช่น ข้อมูลที่ได้จากการ Submit Form หรือข้อมูลที่ได้จากการ Query Database

ตัวอย่าง: การจัดการ Login

login.php:

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // ตรวจสอบ username และ password ในฐานข้อมูล (ควรใช้ Prepared Statements เพื่อป้องกัน SQL Injection)
    // ...

    // ถ้า username และ password ถูกต้อง
    if ($username === 'admin' && $password === 'password') {
        $_SESSION['username'] = $username;
        $_SESSION['is_logged_in'] = true;
        header('Location: dashboard.php'); // Redirect ไปยังหน้า Dashboard
        exit();
    } else {
        $error = 'Invalid username or password.';
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <?php if (isset($error)): ?>
        <p style="color: red;"><?= $error ?></p>
    <?php endif; ?>
    <form method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>

        <button type="submit">Login</button>
    </form>
</body>
</html>

dashboard.php:

<?php
session_start();

if (!isset($_SESSION['is_logged_in']) || $_SESSION['is_logged_in'] !== true) {
    header('Location: login.php'); // Redirect ไปยังหน้า Login ถ้ายังไม่ได้ Login
    exit();
}

$username = $_SESSION['username'];
?>

<!DOCTYPE html>
<html>
<head>
    <title>Dashboard</title>
</head>
<body>
    <h2>Dashboard</h2>
    <p>Welcome, <?= $username ?>!</p>
    <a href="logout.php">Logout</a>
</body>
</html>

logout.php:

<?php
session_start();

// ลบ session ทั้งหมด
session_destroy();

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

ข้อควรระวังในการใช้งาน $_SESSION

  • ความปลอดภัย: ข้อมูลใน $_SESSION จะถูกเก็บไว้บน Server ดังนั้นจึงมีความปลอดภัยมากกว่า $_COOKIE แต่ก็ยังควรระมัดระวังในการเก็บข้อมูลที่สำคัญ เช่น รหัสผ่าน หรือข้อมูลทางการเงิน
  • Session Hijacking: ผู้ไม่หวังดีอาจพยายามขโมย Session ID ของผู้ใช้ เพื่อเข้าถึงข้อมูลใน $_SESSION ควรใช้ HTTPS เพื่อเข้ารหัสข้อมูลที่ส่งระหว่าง Client และ Server และควร Regenerate Session ID เป็นระยะๆ
  • Session Timeout: Session จะหมดอายุเมื่อไม่มีการใช้งานเป็นระยะเวลาหนึ่ง ค่า Default ของ Session Timeout จะถูกกำหนดไว้ใน php.ini หรือสามารถกำหนดได้ใน Code โดยใช้ฟังก์ชัน session_set_cookie_params() หรือ ini_set()
  • การใช้งาน Resource: การเก็บข้อมูลจำนวนมากใน $_SESSION อาจทำให้ Server ทำงานหนัก ควรเก็บเฉพาะข้อมูลที่จำเป็นเท่านั้น

ในบทเรียนนี้ เราได้เรียนรู้เกี่ยวกับ $_SESSION ซึ่งเป็น Superglobal array ที่ใช้ในการจัดการ Session ใน PHP เราได้เรียนรู้วิธีการเริ่มต้น Session, การกำหนดและเข้าถึงค่าใน $_SESSION, และกรณีใช้งานจริงต่างๆ นอกจากนี้ เรายังได้เรียนรู้ข้อควรระวังในการใช้งาน $_SESSION เพื่อให้เราสามารถใช้งาน $_SESSION ได้อย่างมีประสิทธิภาพและปลอดภัย

ในบทเรียนถัดไป เราจะมาเรียนรู้เกี่ยวกับ Superglobal array อีกตัวหนึ่งที่ใช้ในการจัดการ Cookie นั่นคือ $_COOKIE

Office.in.th Custom Service

想基于此结构开发或定制系统?

Office.in.th 承接企业级 Web Application、API Integration 以及政府/企业管理系统的设计与开发,并提供长期支持。

查看软件开发服务